簡體   English   中英

Pandas:如何從另一個數據幀中獲取出現次數?

[英]Pandas: How to get count of occurrence from another data frame?

我正在使用 Python Pandas。 我有 2 個數據框(即:df1、df2)。 'df1' 包含標頭級數據,如卡 ID、發行日期等。'df2' 具有粒度級數據,如由特定卡 ID 執行的每筆交易。 'Card-id' 在兩個數據幀之間是通用的。

df1:
 first_active_month          card_id  feature_1  feature_2  feature_3 
            2017-06  C_ID_92a2005557          5          2          1   
            2017-01  C_ID_3d0044924f          4          1          0   
            2016-08  C_ID_d639edf6cd          2          2          0   
            2017-09  C_ID_186d6a6901          4          3          0   
            2017-11  C_ID_cdbd2c0db2          1          3          0

df2:
   junk_id   authorized_flag          card_id  city_id Authorized 
    13292136               Y  C_ID_92a2005557      101          N   
    20069042               Y  C_ID_7a238b3713       69          N   
     5029656               Y  C_ID_92a2005557       17          N   
    16356907               N  C_ID_3d0044924f       -1          Y   
     8203441               Y  C_ID_fcf33361c2       17          N

我想在 df1 中添加一個“頻率”列,它將顯示 df2 中 df1 的每個卡 ID 的出現次數。 所以,df1 應該如下所示:

df1 (after executing the command):
 first_active_month          card_id  feature_1  feature_2  feature_3    frequency
            2017-06  C_ID_92a2005557          5          2          1      2
            2017-01  C_ID_3d0044924f          4          1          0      5
            2016-08  C_ID_d639edf6cd          2          2          0      3
            2017-09  C_ID_186d6a6901          4          3          0      1
            2017-11  C_ID_cdbd2c0db2          1          3          0      7

請注意:我是 Python / Pandas 的新手。 我已經瀏覽了該站點的多個線程,但所有線程都提到在同一個數據幀中計數。 我正在尋找使用加入/合並功能的計數。 我已經瀏覽過的主題: 這個這個這個這個這個這個這個

我認為您需要Series.mapSeries.value_countsSeries.fillna來替換缺失值:

df1['frequency'] = df1['card_id'].map(df2['card_id'].value_counts()).fillna(0).astype(int)
print (df1)
  first_active_month          card_id  feature_1  feature_2  feature_3  \
0            2017-06  C_ID_92a2005557          5          2          1   
1            2017-01  C_ID_3d0044924f          4          1          0   
2            2016-08  C_ID_d639edf6cd          2          2          0   
3            2017-09  C_ID_186d6a6901          4          3          0   
4            2017-11  C_ID_cdbd2c0db2          1          3          0   

   frequency  
0          2  
1          1  
2          0  
3          0  
4          0  

實際上,您的問題中有一部分答案。 你應該先計算頻率:

df3 = df2.groupby(["card_id"], as_index=False)[["junk_id"]].count().rename(columns={"junk_id":"frequency"})

需要重命名部分,因為 pandas 在 groupby 操作后保留列名不變。 接下來,您可以合並您的 dfs:

df1 = df1.merge(df3, how='left', on='card_id')

您當然可以通過將df3替換為 merge 語句在一行中做到這一點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM