提问人:Kumar Arunachal 提问时间:10/8/2023 最后编辑:Kumar Arunachal 更新时间:10/8/2023 访问量:53
Pandas:将两列中的 null 值添加到 null
Pandas: Add null values in two columns to null
问:
我有一张如下表。
一个 | B | C |
---|---|---|
1.0 | 1.5 | 基线 |
南 | 南 | 基线 |
2.0 | 南 | 基线 |
我想在对前两列求和后插入一列,并希望得到如下所示的结果。
一个 | B | 和 | C |
---|---|---|---|
1.0 | 1.5 | 2.5 | 基线 |
南 | 南 | 南 | 基线 |
2.0 | 南 | 2.0 | 基线 |
我正在尝试的代码是, df.insert(2, 'Sum', df[['A', 'B']].sum(axis=1))
但我得到以下结果。
一个 | B | 和 | C |
---|---|---|---|
1.0 | 1.5 | 2.5 | 基线 |
南 | 南 | 0.0 | 基线 |
2.0 | 南 | 2.0 | 基线 |
我想将 NaN 的总和作为 NaN 保留在总和列中。有什么捷径可以做到这一点吗?
一些帖子建议,我可以做(df['A'].fillna('') + df['B'].fillna('')).replace('', np.nan))。但是浮点列不允许用 '' 替换 Nan。而且我有多个列要求和,并希望避免使用冗长的公式。任何建议将不胜感激!
答:
2赞
Corralien
10/8/2023
#1
你可以使用 np.where
:
res = np.where(df[['A', 'B']].notna().any(axis=1),
df[['A', 'B']].sum(axis=1), np.NaN)
df.insert(2, 'Sum', res)
输出:
>>> df
A B Sum C
0 1.0 1.5 2.5 Baseline
1 NaN NaN NaN Baseline
2 2.0 NaN 2.0 Baseline
如果没有 numpy,您可以执行以下操作:
res = df[['A', 'B']].sum(axis=1)[df[['A', 'B']].notna().any(axis=1)]
df.insert(2, 'Sum', res)
另一种方式:
res = df[['A', 'B']].fillna(0, limit=1, axis=1).sum(axis=1, skipna=False)
评论
df.to_dict()