给定一个多索引DataFrame:
col_A col_B
level_0 level_1
A x 1.0 NaN
y NaN 1.0
x NaN 2.0
y 2.0 NaN
如何从df中删除NaN并从多索引中复制以获取:
col_A col_B
level_0 level_1
A x 1.0 2.0
y 2.0 1.0
这是MWE:
import pandas as pd
import numpy as np
index = pd.MultiIndex.from_product([['A', 'A'],
['x', 'y']],
names=['level_0',
'level_1'])
data =[
[1, np.NaN],
[np.NaN, 1],
[np.NaN,2],
[2, np.NaN],
]
df = pd.DataFrame(data=data, index=index, columns=['col_A', 'col_B'])
print df
答案 0 :(得分:3)
您可以将sum
与level
参数一起使用:
df.sum(level=[0,1])
或@JohnGalt建议:
df.sum(level=df.index.names)
输出:
col_A col_B
level_0 level_1
A x 1.0 2.0
y 2.0 1.0
答案 1 :(得分:2)
尝试使用第一个非缺失值的groupby.first
:
df.groupby(level=[0,1]).first()
# col_A col_B
#level_0 level_1
# A x 1.0 2.0
# y 2.0 1.0
答案 2 :(得分:2)
在groupby
名称上使用index
,并获取first
个值。
In [642]: df.groupby(level=df.index.names).first()
Out[642]:
col_A col_B
level_0 level_1
A x 1.0 2.0
y 2.0 1.0
注意:发布编辑后,意识到它与Psidom的答案几乎完全相同。 level
答案 3 :(得分:1)
或者您可以使用idxmax
df.reset_index().groupby(['level_0','level_1']).idxmax()
或只是使用
df.stack().unstack()
Out[242]:
col_A col_B
level_0 level_1
A x 1.0 2.0
y 2.0 1.0