我有一个像这样的熊猫数据框。
ITEM SKU PRICE
0 FOO OLD 120 45
1 FOO OLD 121 48
2 BAR OLD 122 51
3 BAR OLD 123 54
4 FOO NEW 120 60
5 FOO NEW 121 65
6 BAR NEW 122 70
7 BAR 123 75
8 BAR 124 80
澄清:我可以确保ITEM
中的值没有歧义,并且实际上可以确保在转换之前将其正确地分为A和B。
我想将其转换为:
ITEM SKU OLD NEW
0 FOO 120 45 60
1 FOO 121 50 65
2 BAR 122 55 70
3 BAR 123 60 75
4 BAR 124 NaN 80
我知道我可以拆分旧价格和新价格,重命名列,甚至从" NEW"
中剥离" OLD"
和ITEM
。完成此操作后,我不知道该怎么办。
此外,我怀疑这些步骤是不必要的,因为可能存在更好的方法来更清晰地重塑此数据框。
答案 0 :(得分:2)
使用:
df[['A','B']] = df.pop('ITEM').str.split(expand=True)
df['B'] = df['B'].fillna('NEW')
df = df.set_index(['A','SKU','B'])['PRICE'].unstack().reset_index().rename_axis(None, axis=1)
print (df)
A SKU NEW OLD
0 BAR 122 70.0 51.0
1 BAR 123 75.0 54.0
2 BAR 124 80.0 NaN
3 FOO 120 60.0 45.0
4 FOO 121 65.0 48.0
如果由于重复而无法使用:
df = df.pivot_table(index=['A','SKU'], columns='B', values='PRICE').reset_index()