Pandas groupby 正在更改列值

问题描述 投票:0回答:1

我有一个多索引 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

enter image description here

现在如果我使用 groupby 来提取 myIndex1 的第一次出现:

df.groupby(level='myIndex1').first()

enter image description here

因此 myIndex1 = A 第一次出现的列 'C2' 不再是 None,而是更改为 'ca'。

我已经检查过,如果列值为 None 或 NaN,就会发生这种情况。 当然,我可以替换这些值,但我想避免这种情况。

对于可能导致这种行为的原因以及如何避免它有什么想法吗? 谢谢!

python pandas group-by
1个回答
0
投票

默认情况下,

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
© www.soinside.com 2019 - 2024. All rights reserved.