我有以下熊猫数据帧
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
我想将所有小麦品种(即春季和冬季)合并为一个称为小麦的 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']
虽然这完全是我想要的,但我相信熊猫有更聪明、更有效的方式来做到这一点。
你能帮我这个吗?
这感觉有点像一个黑客,但你可以在这里使用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
请参阅在文档中设置元数据。