比较两个数据帧的列值和增量计数

2024-04-25 07:59:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个数据帧,比如 df1=

Hair  Feathers  Eggs  Type
 0       0       0     1
 1       0       0     1
 0       1       0     2
 0       1       1     2
 0       0       1     6

和df2=

^{pr2}$

如何比较df2的第一行与df1的所有行,如果df2.Hair等于df1.Hair值,那么计数值应该通过递增1来更新。同样,对于df2的第二行,依此类推。 任何帮助将不胜感激。 结果输出应该如下所示,它只针对df2的第一行

Hair  Feathers  Eggs  Type  Count
 0       0       0     1      1
 0       0       0     2      2
 0       0       0     6      1

Tags: 数据typecounteggs数值df1df2hair
2条回答

您可以使用groupby和count来获得相关的计数,然后使用merge将正确的值放入结果数据框中。E、 g组:

data1 = {'Hair': [0,1,0,0,0],
'Feathers': [0,0,1,1,0],
'Eggs': [0,0,0,1,1],
'Type': [1,1,2,2,6]}
df = pd.DataFrame(data1)

data2 = {'Hair': [0,1,1],
'Feathers': [0,0,0],
'Eggs': [0,0,1]}

df2 = pd.DataFrame(data2)

df_counts = df.groupby(['Hair', 'Type']).agg('count')[['Feathers']].reset_index()
df_counts.rename(columns={'Feathers': 'Count'}, inplace=True)
pd.merge(df2, df_counts, how='outer', on='Hair')

我相信您需要^{}和{a2}:

print (df1.groupby(['Hair', 'Type']).size().reset_index(name='count'))
   Hair  Type  count
0     0     1      1
1     0     2      2
2     0     6      1
3     1     1      1

#if need default inner join
df3 = df2.merge(df1.groupby(['Hair', 'Type']).size().reset_index(name='count'), on='Hair')
#if need right join
#df3 = (df2.merge(df1.groupby(['Hair', 'Type']).size().reset_index(name='count'), 
#                  on='Hair', how='right'))
print (df3)

   Hair  Feathers  Eggs  Type  count
0     0         0     0     1      1
1     0         0     0     2      2
2     0         0     0     6      1
3     1         0     0     1      1
4     1         0     1     1      1

相关问题 更多 >