我正在翻译熊猫的Excel公式。我有两个数据帧df1
和df2
,我将需要在列第一个数据帧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
的成员,例如df1
和Clems
,因为该组不在Pilato
中,因此不需要计数。
我可以做正确的计数(请参见下面的代码),我的问题是比较df2
中的id
和df1
中的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
答案 0 :(得分:2)
由Series
使用map
:
df2['count'] = df2['group_id'].map(df1.groupby('id')['id'].count())
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()
用作计数的一种更清晰,更简洁的版本。