我有以下pandas dataframe
Crop Spring wheat Winter wheat
Climate Subtropical Humid continental Temperate
Year
1981 354.666667 258.666667 159.666667
1982 280.000000 313.333333 157.333333
1983 386.666667 313.000000 122.333333
1984 336.333333 253.333333 196.333333
1985 329.000000 173.666667 126.333333
1986 299.666667 326.333333 188.666667
1987 264.666667 248.333333 123.666667
1988 246.666667 257.333333 113.666667
1989 204.666667 329.666667 211.000000
1990 185.333333 349.666667 152.333333
1991 276.666667 329.000000 158.000000
1992 260.333333 303.666667 150.333333
1993 271.000000 278.000000 208.000000
1994 356.333333 393.666667 174.333333
1995 397.666667 318.333333 110.666667
1996 151.666667 312.666667 327.333333
1997 212.666667 350.666667 143.000000
1998 197.000000 152.666667 118.666667
我想将所有小麦品种(即春季和冬季)合并为一个名为Wheat的0级单品。出来应该是:
Crop Wheat
Climate Humid continental Temperate Subtropical
Year
1981 258.666667 159.666667 354.666667
1982 313.333333 157.333333 280.000000
1983 313.000000 122.333333 386.666667
1984 253.333333 196.333333 336.333333
1985 173.666667 126.333333 329.000000
1986 326.333333 188.666667 299.666667
1987 248.333333 123.666667 264.666667
1988 257.333333 113.666667 246.666667
1989 329.666667 211.000000 204.666667
1990 349.666667 152.333333 185.333333
1991 329.000000 158.000000 276.666667
1992 303.666667 150.333333 260.333333
1993 278.000000 208.000000 271.000000
1994 393.666667 174.333333 356.333333
1995 318.333333 110.666667 397.666667
1996 312.666667 327.333333 151.666667
1997 350.666667 143.000000 212.666667
1998 152.666667 118.666667 197.000000
我设法通过在数据框中创建一个新的0级(小麦)并用1级列(春小麦,冬小麦)中的数据填充它来实现预期的结果:
df['Wheat', 'Humid continental'] = df['Winter wheat']['Humid continental']
df['Wheat', 'Temperate'] = df['Winter wheat']['Temperate']
df['Wheat', 'Subtropical'] = df['Spring wheat']['Subtropical']
虽然这完全符合我的要求,但我确信熊猫有更聪明,更有效的方法。
请你帮帮我吗?
答案 0 :(得分:0)
这感觉有点像黑客,但你可以在这里使用set_levels
:
In [11]: df1.columns.set_levels(['Wheat', 'Wheat'], 'Crop')
Out[11]:
MultiIndex(levels=[[u'Wheat', u'Wheat'], [u'Humid continental', u'Subtropical', u'Temperate']],
labels=[[0, 1, 1], [1, 0, 2]],
names=[u'Crop', u'Climate'])
In [12]: df1.columns = df1.columns.set_levels(['Wheat', 'Wheat'], 'Crop')
In [13]: df1
Out[13]:
Crop Wheat
Climate Subtropical Humid continental Temperate
Year
1981 354.666667 258.666667 159.666667
1982 280.000000 313.333333 157.333333
1983 386.666667 313.000000 122.333333
1984 336.333333 253.333333 196.333333
1985 329.000000 173.666667 126.333333
1986 299.666667 326.333333 188.666667
1987 264.666667 248.333333 123.666667
1988 246.666667 257.333333 113.666667
1989 204.666667 329.666667 211.000000
1990 185.333333 349.666667 152.333333
1991 276.666667 329.000000 158.000000
1992 260.333333 303.666667 150.333333
1993 271.000000 278.000000 208.000000
1994 356.333333 393.666667 174.333333
1995 397.666667 318.333333 110.666667
1996 151.666667 312.666667 327.333333
1997 212.666667 350.666667 143.000000
1998 197.000000 152.666667 118.666667
请参阅文档中的setting metadata。