将列转换为Pandas数据框中的行

时间:2018-11-05 12:46:03

标签: python pandas dataframe pivot pivot-table

我有两列的Pandas数据框。一个是唯一标识符,第二个是附加到此唯一标识符的产品名称。我有重复的标识符和产品名称值。我想将一列产品名称转换为几列而不重复标识符。也许我需要通过标识符来汇总产品名称。

我的数据框如下:

ID  Product_Name
100  Apple
100  Banana
200  Cherries
200  Apricots
200  Apple
300  Avocados

想拥有这样的数据框:

ID 
100  Apple Banana
200  Cherries Apricots Apple
300  Avocados

每个标识符旁边的每个产品都必须在单独的列中

我尝试了pd.meltpd.pivotpd.pivot_table,但只有错误,并且此错误表明No numeric types to aggregate

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

cumcount用于新的列名,以set_index命名为MultiIndex,并以unstack进行整形:

df = df.set_index(['ID',df.groupby('ID').cumcount()])['Product_Name'].unstack()

或由建设者创建Serieslist和新DataFrame

s = df.groupby('ID')['Product_Name'].apply(list)
df = pd.DataFrame(s.values.tolist(), index=s.index)

print (df)
            0         1      2
ID                            
100     Apple    Banana    NaN
200  Cherries  Apricots  Apple
300  Avocados       NaN    NaN

但是如果要2列DataFrame

df1 = df.groupby('ID')['Product_Name'].apply(' '.join).reset_index(name='new')
print (df1)
    ID                      new
0  100             Apple Banana
1  200  Cherries Apricots Apple
2  300                 Avocados

答案 1 :(得分:0)

使用枢轴功能pivoting可以完成所需的操作!