gpt4 book ai didi

python - Pandas 根据条件交换列

转载 作者:太空狗 更新时间:2023-10-29 20:44:49 24 4
gpt4 key购买 nike

我有一个如下所示的 Pandas 数据框:

    Col1  Col2  Col3
0 A 7 NaN
1 B 16 NaN
1 B 16 15

我想要做的是将 Col2 与 Col3 交换,其中 Col3 的值为 NaN。根据 SO 上的其他帖子和答案,到目前为止我有这段代码:

df[['Col2', 'Col3']] = df[['Col3', 'Col2']].where(df[['Col3']].isnull())

但这似乎无法正常工作并给了我以下信息:

    Col1  Col2  Col3
0 A NaN NaN
1 B NaN NaN
1 B NaN NaN

这里有什么我可能遗漏的吗?

更新:我想要的输出如下:

    Col1  Col2  Col3
0 A NaN 7
1 B NaN 16
1 B 16 15

谢谢

最佳答案

您可以使用 loc 进行交换:

df.loc[df['Col3'].isnull(), ['Col2', 'Col3']] = df.loc[df['Col3'].isnull(), ['Col3', 'Col2']].values

请注意,.values 是确保交换正确完成所必需的,否则 Pandas 会尝试根据索引和列名进行对齐,并且不会发生交换。

如果您觉得代码更简洁,您也可以单独重新分配每一行:

null_idx = df['Col3'].isnull()
df.loc[null_idx, 'Col3'] = df['Col2']
df.loc[null_idx, 'Col2'] = np.nan

结果输出:

  Col1  Col2  Col3
0 A NaN 7.0
1 B NaN 16.0
2 B 16.0 15.0

关于python - Pandas 根据条件交换列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38901563/

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