【问题标题】:Pandas: How to get count of occurrence from another data frame?Pandas:如何从另一个数据框中获取出现次数?
【发布时间】:2020-02-06 09:30:33
【问题描述】:

我正在使用 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 的每个 card-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 的新手。我已经浏览了该站点的多个线程,但所有线程都提到在同一个数据帧中计数。我正在寻找使用加入/合并功能的计数。我已经浏览过的主题:thisthisthisthisthisthisthis

【问题讨论】:

    标签: python-3.x pandas dataframe


    【解决方案1】:

    实际上,您的问题中有一部分答案。你应该先计算频率:

    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 替换为合并语句在一行中做到这一点。

    【讨论】:

      【解决方案2】:

      我认为您需要 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  
      

      【讨论】:

        猜你喜欢
        • 2023-01-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多