熊猫-转置一列

时间:2018-09-27 17:07:05

标签: python pandas dataframe

我很难和熊猫一起换位。

我有以下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实用程序,我可能正在转置上进行隧道操作...

3 个答案:

答案 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_indexdate提升到一列。

答案 1 :(得分:1)

我提出的解决方案绝不比 jpp 更好。我只是碰巧遇到了同样的问题并以不同的方式解决了。

df.set_index(['date', 'name']).unstack()

结果看起来也有点混乱,但它在我的情况下有效:

enter image description here

答案 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