在Pandas中,有没有一种方法可以在一个数据帧中计数(Excel中的Countifs)并在另一个长度不同的数据帧中将计数添加为新列?

时间:2018-12-31 13:58:16

标签: python pandas dataframe

我正在翻译熊猫的Excel公式。我有两个数据帧df1df2,我将需要在列第一个数据帧df1中对值进行计数,并填充数据帧df2,其中在{{1}中计算的值}等于df1中的值。如何检查df2中的计数值并填充df2中的新列?

df1

df1

id member seq 0 48299 Koif 1 1 48299 Iki 1 2 48299 Juju 2 3 48299 PNik 3 4 48865 Lok 1 5 48865 Mkoj 2 6 48865 Kino 1 7 64865 Boni 1 8 64865 Afriya 2 9 50774 Amah 2 10 23697 Pilato 1 11 23697 Clems 1

df2

可能有来自 group_id group_name count 0 48299 e_sys 1 50774 Y3N 2 64865 nana 3 48865 juzti 的成员,例如df1Clems,因为该组不在Pilato中,因此不需要计数。

我可以做正确的计数(请参见下面的代码),我的问题是比较df2中的iddf1中的group_id并填充计数值。 / p>

计数:

df2

我当前的解决方案是:

 df1.groupby('id')['id'].count()

两者均无法获得理想的结果。

结果df2['count'] = df1[(df2['group_id'].isin(df1['id']))].count() Or df2['count'] = df1[(df2['group_id'].isin(df1['id']))].transform('count')

df2

2 个答案:

答案 0 :(得分:2)

Series使用map

df2['count'] = df2['group_id'].map(df1.groupby('id')['id'].count())

替代Series.value_counts

df2['count'] = df2['group_id'].map(df1['id'].value_counts())

print (df2)
   group_id group_name  count
0     48299      e_sys      4
1     50774        Y3N      1
2     64865       nana      2
3     48865      juzti      3

答案 1 :(得分:1)

使用左联接合并两个数据框:

counts = df1.groupby('id').size().reset_index()
df2.merge(counts, how='left', left_on='group_id', right_on='id')

输出:

 #      group_id group_name     id  0
 #   0     48299      e_sys  48299  4
 #   1     50774        Y3N  50774  1
 #   2     64865       nana  64865  2
 #   3     48865      juzti  48865  3

左联接确保您仅保留df2中显示的计数。请注意,我将groupby().size()用作计数的一种更清晰,更简洁的版本。