gpt4 book ai didi

python - Pandas Groupby : group **by** a column containing tuples

转载 作者:行者123 更新时间:2023-12-01 04:48:01 25 4
gpt4 key购买 nike

我正在尝试包含元组的列进行分组。每个元组都有不同的长度。

我想对此元组列执行简单的分组操作,例如求和或计数。

示例:

df = pd.DataFrame(data={
'col1': [1,2,3,4] ,
'col2': [('a', 'b'), ('a'), ('b', 'n', 'k'), ('a', 'c', 'k', 'z') ] ,
})

print df

输出:

   col1          col2
0 1 (a, b)
1 2 (a, m)
2 3 (b, n, k)
3 4 (a, c, k, z)

我希望能够 col2 col1 上进行分组,例如使用总和。

预期输出为:

   col2        sum_col1
0 a 7
1 b 4
2 c 4
3 n 3
3 m 2
3 k 7
3 z 4

我觉得 pd.melt 可能可以使用,但我不知 Prop 体如何使用。

最佳答案

这是使用 .get_dummies.melt 的方法:

import pandas as pd
df = pd.DataFrame(data={
'col1': [1,2,3,4] ,
'col2': [('a', 'b'), ('a'), ('b', 'n', 'k'), ('a', 'c', 'k', 'z') ] ,
})

value_col = 'col1'
id_col = 'col2'

将元组解压到 DataFrame:

df = df.join(df.col2.apply(lambda x: pd.Series(x)))

使用元组值创建列:

dummy_cols = df.columns.difference(df[[value_col, id_col]].columns)
dfd = pd.get_dummies(df[dummy_cols | pd.Index([value_col])])

制作:

   col1  0_a  0_b  1_b  1_c  1_n  2_k  3_z
0 1 1 0 1 0 0 0 0
1 2 1 0 0 0 0 0 0
2 3 0 1 0 0 1 1 0
3 4 1 0 0 1 0 1 1

然后.melt它并清除前缀中的variable列:

dfd = pd.melt(dfd, value_vars=dfd.columns.difference([value_col]).tolist(), id_vars=value_col)
dfd['variable'] = dfd.variable.str.replace(r'\d_', '')
print dfd.head()

产量:

   col1 variable  value
0 1 a 1
1 2 a 1
2 3 a 0
3 4 a 1
4 1 b 0

最后得到你的输出:

dfd[dfd.value != 0].groupby('variable')[value_col].sum()

variable
a 7
b 4
c 4
k 7
n 3
z 4
Name: col1, dtype: int64

关于python - Pandas Groupby : group **by** a column containing tuples,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29025691/

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