gpt4 book ai didi

python - Pandas 数据框合并行以删除 NaN

转载 作者:行者123 更新时间:2023-12-04 14:41:26 26 4
gpt4 key购买 nike

我有一个带有一些 NaN 的数据框:

hostname period Teff
51 Peg 4.2293 5773
51 Peg 4.231 NaN
51 Peg 4.23077 NaN
55 Cnc 44.3787 NaN
55 Cnc 44.373 NaN
55 Cnc 44.4175 NaN
55 Cnc NaN 5234
61 Vir NaN 5577
61 Vir 38.021 NaN
61 Vir 123.01 NaN

具有相同“主机名”的行都指向同一个对象,但如您所见,某些条目在不同列下具有 NaN。我想合并同一主机名下的所有行,以便保留每列中的第一个有限值(如果所有值都是 NaN,则删除该行)。所以结果应该是这样的:
hostname period Teff
51 Peg 4.2293 5773
55 Cnc 44.3787 5234
61 Vir 38.021 5577

你会怎么做?

最佳答案

使用 groupby.first ;它需要 first non NA value :

df.groupby('hostname')[['period', 'Teff']].first().reset_index()
# hostname period Teff
#0 Cnc 44.3787 5234
#1 Peg 4.2293 5773
#2 Vir 38.0210 5577

或者使用自定义聚合函数手动执行此操作:
df.groupby('hostname')[['period', 'Teff']].agg(lambda x: x.dropna().iat[0]).reset_index()

这要求每一组至少有一个非 NA 值。

编写您自己的函数来处理边缘情况:
def first_(g):
non_na = g.dropna()
return non_na.iat[0] if len(non_na) > 0 else pd.np.nan

df.groupby('hostname')[['period', 'Teff']].agg(first_).reset_index()

# hostname period Teff
#0 Cnc 44.3787 5234
#1 Peg 4.2293 5773
#2 Vir 38.0210 5577

关于python - Pandas 数据框合并行以删除 NaN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49034202/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com