基于另一列中的分类变量为公共键添加字典值

2024-04-18 18:05:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试添加多个字典(公共键的总和),基于另一列中的分类变量。我尝试使用groupby(和agg)、groupby(和sum)和Counter()。我还有其他连续的列,但我不想把它们加起来。我不断得到错误或不想要的输出。你知道吗

import pandas as pd       
import numpy as np
from collections import Counter

# input
df1 = pd.DataFrame([
['Cat1', {'Word1': 8, 'Word2': 7, 'Word3': 6, 'Word4':1}], 
['Cat2', {'Word2': 7, 'Word4': 7, 'Word3': 6}], 
['Cat2', {'Word3':3, 'Word5': 2}],
['Cat1', {'Word1': 10, 'Word3': 5, 'Word4':1}]], columns=list('AB'))



# desired output
df_out = pd.DataFrame([
['Cat1', {'Word1': 18, 'Word2': 7, 'Word3': 11, 'Word4':2}],
['Cat2', {'Word2': 7, 'Word3': 9, 'Word4': 7, 'Word5': 2}]], columns=list('AB'))
df_out

# Trial 1 - groupby
for i in range(len(df1)):
    df1.groupby('A')['B'].agg({df1['B'][i])

# Trial 2 - Counter
counter = Counter()
for d in range(len(df['B']):
    counter.update(d)

感谢您的帮助。短暂性脑缺血发作


Tags: importdataframedfascounteraggpddf1
1条回答
网友
1楼 · 发布于 2024-04-18 18:05:04

下面是一个生成常规数据帧而不是一系列dict的解决方案:

pd.DataFrame.from_records(df1.B).groupby(df1.A).sum()

第一步将您的dict序列转换成一个常规的数据帧,每个键有一列。然后是一个简单的groupby和sum得到最终结果:

      Word1  Word2  Word3  Word4  Word5
A                                      
Cat1   18.0    7.0     11    2.0    0.0
Cat2    0.0    7.0      9    7.0    2.0

以这种格式保存数据将比一系列dict有效得多,除非这些值非常稀疏(即矩阵很大,大部分为零)。你知道吗

如果您确实需要将结果作为一系列dicts,则可以这样做:

def add_dicts(s):
    c = Counter()
    s.apply(c.update)
    return dict(c)

df1.groupby('A').B.agg(add_dicts)

它正好产生你的df_out。你知道吗

相关问题 更多 >