所以数据框架是
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
发布于 2018-06-06 06:17:00
在我看来,如果需要稍后处理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
发布于 2018-06-06 05:13:56
实现第二个产出比第一个产出更有意义。使用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
发布于 2018-06-06 05:21:08
尝尝这个,
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
https://stackoverflow.com/questions/50712636
复制相似问题