gpt4 book ai didi

python - Pandas groupby 用于一列中的多个值

转载 作者:太空狗 更新时间:2023-10-30 01:04:15 26 4
gpt4 key购买 nike

我有一个类似于下面的数据框

+----------------+-------+
| class | year |
+----------------+-------+
| ['A', 'B'] | 2001 |
| ['A'] | 2002 |
| ['B'] | 2001 |
| ['A', 'B', 'C']| 2003 |
| ['B', 'C'] | 2001 |
| ['C'] | 2003 |
+----------------+-------+

我想使用它创建一个数据框,以便生成的表格显示每年类(class)中每个类别的计数。

+-----+----+----+----+
|year | A | B | C |
+-----+----+----+----+
|2001 | 1 | 3 | 1 |
|2002 | 1 | 0 | 0 |
|2003 | 1 | 1 | 2 |
+-----+----+----+----+

最简单的方法是什么?

最佳答案

尝试 unnesting

s=unnesting(df,['class'])

然后,我们做crosstab

pd.crosstab(s['year'],s['class'])

方法来自sklearn

from sklearn.preprocessing import MultiLabelBinarizer
mlb = MultiLabelBinarizer()
pd.DataFrame(mlb.fit_transform(df['class']),columns=mlb.classes_, index=df.year).sum(level=0)
Out[293]:
A B C
year
2001 2 2 1
2002 1 1 1
2003 0 1 1

get_dummies的方法

df.set_index('year')['class'].apply(','.join).str.get_dummies(sep=',').sum(level=0)
Out[297]:
A B C
year
2001 2 2 1
2002 1 1 1
2003 0 1 1

def unnesting(df, explode):
idx = df.index.repeat(df[explode[0]].str.len())
df1 = pd.concat([
pd.DataFrame({x: np.concatenate(df[x].values)}) for x in explode], axis=1)
df1.index = idx

return df1.join(df.drop(explode, 1), how='left')

关于python - Pandas groupby 用于一列中的多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55699305/

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