繁体   English   中英

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

[英]Is there a way in Pandas to count (Countifs in excel) in one dataframe and add counts as new column in another dataframe of different length?

我正在翻译熊猫的Excel公式。 我有两个数据帧df1df2 ,我会需要计数在一列中第一数据帧的值df1和填充数据帧df2其中计数的值df1等于一个值df2 如何检查并用df1的计数值填充df2的新列?

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

可能有来自df1成员,例如ClemsPilato ,由于该组不在df2中,因此不需要计数。

我可以做正确的计数(请参见下面的代码),我的问题是比较df1计数iddf2 group_id并填充计数值。

数数:

 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

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

Series使用map

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

使用Series.value_counts替代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

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

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()用作计数的一种更清晰,更简洁的版本。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM