簡體   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