[英]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公式。 我有兩個數據幀df1
和df2
,我會需要計數在一列中第一數據幀的值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
成員,例如Clems
和Pilato
,由於該組不在df2
中,因此不需要計數。
我可以做正確的計數(請參見下面的代碼),我的問題是比較df1
計數id
和df2
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.