我有两列的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.melt
,pd.pivot
,pd.pivot_table
,但只有错误,并且此错误表明No numeric types to aggregate
有什么想法吗?
答案 0 :(得分:2)
将cumcount
用于新的列名,以set_index
命名为MultiIndex
,并以unstack
进行整形:
df = df.set_index(['ID',df.groupby('ID').cumcount()])['Product_Name'].unstack()
或由建设者创建Series
个list
和新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可以完成所需的操作!