【问题标题】:Aggregate DataFrame base on list values基于列表值聚合 DataFrame
【发布时间】:2020-07-10 13:17:28
【问题描述】:

我有下一个问题。

我有一个包含字符串值的列表:

a = ['word1', 'word2', 'word3', 'word4', ..., 'wordN']

我有带有值的数据框:

+--------------+----------+-----------+
| keywords | impressions  | clicks     | 
+--------------+----------+-----------+
| word1    | 1245523      |   12321231 |              
+--------------+----------+-----------+
| word2    | 4212321      |  12312312  |      
+--------------+----------+-----------+
........................................

如果关键字列中符合列表中的单词,请建议我如何使用列表中的列值以及展示次数和点击次数列的总和创建一个特定的聚合数据框。

我尝试使用 iterrows() 方法遍历数据帧,但它不适用于这种情况。

【问题讨论】:

  • 你可以使用isin + groupby sum

标签: python pandas dataframe pandas-groupby


【解决方案1】:

您需要过滤您的 df 以确保您只使用列表中的项目。

df = df[df['keywords'].isin(a)]

然后你会使用 groupby 来聚合你的结果

df.groupby('keywords', as_index=False).sum()

【讨论】:

    【解决方案2】:

    指定df,然后减去不求和的列("keywords"),最后循环遍历单词列表:

    import pandas as pd
    
    a = ['word1', 'word2']
    
    df = pd.DataFrame([
        ["word1", 1245523, 12321231],
        ["word2", 4212321, 12312312]
    ],
    columns=["keywords", "impressions", "clicks"]
    )
    
    col_list = list(df)
    col_list.remove('keywords')
    
    for word in a:
        df[word] = df[col_list].sum(axis=1)
    
    print(df)
    

    返回:

      keywords  impressions    clicks     word1     word2
    0    word1      1245523  12321231  13566754  13566754
    1    word2      4212321  12312312  16524633  16524633
    

    【讨论】:

      【解决方案3】:

      找到路了:

      b = []
      for i in a:
        b.append((a, checking_data[checking_data['keywords'].str.contains(a)][['impressions', 'clicks']].sum().values[0], 
                     checking_data[checking_data['keywords'].str.contains(a)][['impressions', 'clicks']].sum().values[1]))
      
      
      groupedOne_df = pd.DataFrame.from_records(b, columns = ['keywords', 'impressions', 'clicks'])
      
      

      现在您可以根据这些值创建 pandas df。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多