我有一个多索引 Pandas DataFrame,我正在使用 groupby 来提取包含第一个索引第一次出现的行。 然而,执行此操作后,输出列值并不总是与原始值相对应。 这是重现此行为的简单示例:
df = pd.DataFrame([{'myIndex1' : 'A', 'myIndex2' : 0, 'C1' : 1.0, 'C2' : None},
{'myIndex1' : 'A', 'myIndex2' : 1, 'C1' : 0.5, 'C2' : 'ca'},
{'myIndex1' : 'B', 'myIndex2' : 0, 'C1' : 3.0, 'C2' : 'cb'},
{'myIndex1' : 'C', 'myIndex2' : 0, 'C1' : 2.0, 'C2' : 'cc'}])
df.set_index(['myIndex1','myIndex2'],inplace=True)
df
现在如果我使用 groupby 来提取 myIndex1 的第一次出现:
df.groupby(level='myIndex1').first()
因此 myIndex1 = A 第一次出现的列 'C2' 不再是 None,而是更改为 'ca'。
我已经检查过,如果列值为 None 或 NaN,就会发生这种情况。 当然,我可以替换这些值,但我想避免这种情况。
对于可能导致这种行为的原因以及如何避免它有什么想法吗? 谢谢!
groupby.first
会跳过 NaN 值,请使用 skipna=False
:
df.groupby(level='myIndex1').first(skipna=False)
groupby.nth
:
df.groupby(level='myIndex1').nth(0)
groupby.head
:
df.groupby(level='myIndex1').head(1)
输出:
C1 C2
myIndex1
A 1.0 None
B 3.0 cb
C 2.0 cc