gpt4 book ai didi

python - 折叠 Pandas 行以消除 NaN 条目

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

让我们考虑以下 DataFrame

<表类="s-表"><头>姓名ABCD<正文>汤姆10.0NaNNaNNaN汤姆NaN15.0NaNNaN汤姆NaNNaN20.0NaN汤姆NaNNaNNaN25.0汤姆30.0NaNNaNNaN汤姆NaNNaNNaN40.0约翰1.0NaNNaNNaN约翰NaN2.0NaNNaN约翰NaNNaN3.0NaN约翰NaNNaNNaN4.0约翰5.0NaNNaNNaN约翰NaN6.0NaNNaN约翰NaNNaN7.0NaN约翰NaNNaNNaN8.0

我想折叠它以限制 NaN 的数量DataFrame 中的值 - 可以是顺序的,即如果可能的话合并相邻的行,但我只关心列的值 A-D对应同一个Name崩溃之后

我的完美结果是

<表类="s-表"><头>姓名ABCD<正文>汤姆10.015.020.025.0汤姆30.0NaNNaN40.0约翰1.02.03.04.0约翰5.06.07.08.0

据我了解, Pandas groupby('Name')不会成功,因为它会为每个名称留下一个条目。

如果这有任何帮助,我会使用字典来创建数据框。字典看起来像这样:

{
"a": {
"tom": [10.0, 30.0],
"john": [1.0, 5.0]
},
"b": {
"tom": [15.0],
"john": [2.0, 6.0]
},
.....
}

所以,基本上,我提取字典中的每个数字,然后只用这个数字创建一行,然后合并所有行。

是否有一种简单的方法来折叠生成的 DataFrame 或在给定这样的字典的情况下构建更紧凑的 DataFrame

最佳答案

您可以 .groupby + .transform(在其中“向上移动”值)。然后删除包含所有 NaN 值的行:

print(
df.set_index("Name")
.groupby(level=0)
.transform(lambda x: sorted(x, key=lambda k: pd.isna(k)))
.dropna(axis=0, how="all")
.reset_index()
)

打印:

   Name     A     B     C     D
0 tom 10.0 15.0 20.0 25.0
1 tom 30.0 NaN NaN 40.0
2 john 1.0 2.0 3.0 4.0
3 john 5.0 6.0 7.0 8.0

关于python - 折叠 Pandas 行以消除 NaN 条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67678869/

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