我很难和熊猫一起换位。
我有以下df:
date name quantity
1/1/2018 A 5
1/1/2018 B 6
1/1/2018 C 7
1/2/2018 A 9
1/2/2018 B 8
1/2/2018 C 6
我最终希望为每个日期的所有名称及其数量创建成对关联。为此,我正在尝试首先从此df创建以下输出:
date A B C
1/1/2018 5 6 7
1/2/2018 9 8 6
转置对我来说很困难,因为我可以获得重复的列标题,但是我也不想通过先删除它们而丢失任何数据。我觉得答案可能是我没有真正使用的panda实用程序,我可能正在转置上进行隧道操作...
答案 0 :(得分:4)
由于您不执行汇总,因此pd.DataFrame.pivot
优于groupby
/ pivot_table
:
res = df.pivot(index='date', columns='name', values='quantity')
print(res)
name A B C
date
1/1/2018 5 6 7
1/2/2018 9 8 6
如果愿意,可以使用reset_index
将date
提升到一列。
答案 1 :(得分:1)
我提出的解决方案绝不比 jpp 更好。我只是碰巧遇到了同样的问题并以不同的方式解决了。
df.set_index(['date', 'name']).unstack()
结果看起来也有点混乱,但它在我的情况下有效:
答案 2 :(得分:0)
这是一个 groupby
解决方案,尽管与 pivot
方法相比,它非常不切实际。我只会推荐这个练习来熟悉 Pandas 的索引。
# Get values of 'quantity' for each date
x = df.groupby('date')['quantity'].agg(list)
# Insert these values into a new data frame
df2 = pd.DataFrame(index=x.index, data=x.to_list(), columns=df['name'].unique())
返回:
A B C
date
1/1/2018 5 6 7
1/2/2018 8 9 6