gpt4 book ai didi

python - 融化 Pandas 中的分类列

转载 作者:太空宇宙 更新时间:2023-11-04 02:21:46 25 4
gpt4 key购买 nike

我正在尝试从名为 df 的数据帧创建以下名为 out 的数据帧。我有一种非常手动且缓慢的方法,但我希望它可以通过 groupby()melt()

的组合来完成
import pandas as pd
import itertools

def expand_grid(data_dict):
rows = itertools.product(*data_dict.values())
return pd.DataFrame.from_records(rows, columns=data_dict.keys())

data_dict = dict(
id1 = list('ab'),
id2 = list('cd'),
col1 = list('ef'),
col2 = list('gh'),
col3 = list('ij'),
)

df = expand_grid(data_dict)
df['value'] = range(1,33)

out = pd.melt(df.drop('value', axis=1), id_vars=['id1', 'id2'], var_name='col', value_name='level')
out = out.drop_duplicates().reset_index()

myvals = []
for r in out.index:
out_row = out.loc[r]
df_sub = df.loc[(df.id1 == out_row[1]) & (df.id2 == out_row[2]) & (df[out_row[3]] == out_row[4])]
myvals.append(df_sub.value.sum())

out['value'] = myvals

谢谢!

最佳答案

使用 meltgroupby

df.melt(
['id1', 'id2', 'value'],
['col1', 'col2', 'col3'],
value_name='level', var_name='col'
).groupby(['id1', 'id2', 'col', 'level'], as_index=False).sum()

id1 id2 col level value
0 a c col1 e 10
1 a c col1 f 26
2 a c col2 g 14
3 a c col2 h 22
4 a c col3 i 16
5 a c col3 j 20
6 a d col1 e 42
7 a d col1 f 58
8 a d col2 g 46
9 a d col2 h 54
10 a d col3 i 48
11 a d col3 j 52
12 b c col1 e 74
13 b c col1 f 90
14 b c col2 g 78
15 b c col2 h 86
16 b c col3 i 80
17 b c col3 j 84
18 b d col1 e 106
19 b d col1 f 122
20 b d col2 g 110
21 b d col2 h 118
22 b d col3 i 112
23 b d col3 j 116

关于python - 融化 Pandas 中的分类列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51446696/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com