gpt4 book ai didi

python - 旋转数据 Pandas

转载 作者:太空宇宙 更新时间:2023-11-03 13:32:00 25 4
gpt4 key购买 nike

我正在尝试转换这些数据:

         ID
UserID
1 a1
1 a2
2 a1
2 a3

像这样的数据框:

UserID   a1   a2   a3
1 1 1 0
2 1 0 1

我试过执行以下 df = pd.pivot_table(df, index='UserID', columns='ID',但它给了我一个 DataError: No numeric types聚合错误。我该怎么办?

最佳答案

第一列是index,因此有必要将index='UserID'更改为index=df.index

聚合函数也是GroupBy.size

df = pd.pivot_table(df, index=df.index, columns=df['ID'], aggfunc='size', fill_value=0)
print (df)
ID a1 a2 a3
UserID
1 1 1 0
2 1 0 1

解决方案 crosstab :

df = pd.crosstab(df.index,df['ID'])
print (df)
ID a1 a2 a3
row_0
1 1 1 0
2 1 0 1

或 ( pandas 0.20.1+ ) 解决方案 - groupby通过 index 和列一起,聚合 size 并通过 unstack reshape :

df = df.groupby(['UserID','ID']).size().unstack(fill_value=0)
print (df)
ID a1 a2 a3
UserID
1 1 1 0
2 1 0 1

pandas bellow 0.20.1 solution - convert index to column by reset_index :

df = df.reset_index().groupby(['UserID','ID']).size().unstack(fill_value=0)
print (df)
ID a1 a2 a3
UserID
1 1 1 0
2 1 0 1

编辑:

似乎也可以通过索引名称选择索引(不确定在 0.20.1 以下是否有效):

df = pd.pivot_table(df, index='UserID', columns='ID', aggfunc='size', fill_value=0)
print (df)
ID a1 a2 a3
UserID
1 1 1 0
2 1 0 1

关于python - 旋转数据 Pandas ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45627362/

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