所以数据框是
Product Price Weight Range Count
A 40 20 1-3 20
A 40 20 4-7 23
B 20 73 1-3 54
B 20 73 4-7 43
B 20 73 8-15 34
B 20 73 >=16 12
C 10 20 4-7 22
所以基本上有一个价格和重量的产品,此处的范围指定产品连续销售的天数,而计数指定在该范围内销售的产品数量
预期产出
Product Price Weight Range Count
A 40 20 1-3 20
4-7 23
B 20 73 1-3 54
4-7 43
8-15 34
B 20 73 >=16 12
C 10 20 4-7 22
或
Product Price Weight 1-3 4-7 8-15 >=16
A 40 20 20 23 NaN NaN
B 20 73 54 43 34 1
C 10 20 0 22 NaN NaN
答案 0 :(得分:3)
实现第二个输出比第一个输出更有意义。使用set_index
,然后使用unstack
。
(df.set_index(['Product', 'Price', 'Weight', 'Range'])
.Count
.unstack(fill_value=0)
.reset_index()
)
Range Product Price Weight 1-3 4-7 8-15 >=16
0 A 40 20 20 23 0 0
1 B 20 73 54 43 34 12
2 C 10 100 0 22 0 0
答案 1 :(得分:2)
在我看来,如果以后需要进程DataFrame
,建议不要使用第一个解决方案。
第二种解决方案要好得多,如果实际数据中的重复是必要的聚合值,例如sum
:
#convert catagoricals to strings
df['Range'] = df['Range'].astype(str)
df = (df.groupby(['Product', 'Price', 'Weight', 'Range'])['Count']
.sum()
.unstack(fill_value=0)
.reset_index())
print (df)
Range Product Price Weight 1-3 4-7 8-15 >=16
0 A 40 20 20 23 0 0
1 B 20 73 54 43 34 12
2 C 10 20 0 22 0 0
答案 2 :(得分:1)
试试这个,
mask=df.duplicated(subset=['Product'])
df.loc[mask,['Product','Price','Weight']]=''
输出:
Product Price Weight Range Count
0 A 40 20 1-3 20
1 4-7 23
2 B 20 73 1-3 54
3 4-7 43
4 8-15 34
5 >=16 12
6 C 10 100 4-7 22
。
pd.pivot_table(df,index=['Product','Price','Weight'],columns='Range',values='Count').reset_index()
输出:
Range Product Price Weight 1-3 4-7 8-15 >=16
0 A 40 20 20.0 23.0 NaN NaN
1 B 20 73 54.0 43.0 34.0 12.0
2 C 10 100 NaN 22.0 NaN NaN