pandas 如何在 Dataframe 中进行方法链填充(axis=1)

ilmyapht  于 2022-11-20  发布在  其他
关注(0)|答案(2)|浏览(107)

如果bnan,我想用a中的值填充 Dataframe 的b列,并且我想在方法链中完成此操作,但我不知道如何完成。
以下作品

import numpy as np
import pandas as pd

df = pd.DataFrame(
    {"a": [1, 2, 3, 4], "b": [10, np.nan, np.nan, 40], "c": ["a", "b", "c", "d"]}
)
df["b"] = df[["a", "b"]].ffill(axis=1)["b"]
print(df.to_markdown())

|    |   a |   b | c   |
|---:|----:|----:|:----|
|  0 |   1 |  10 | a   |
|  1 |   2 |   2 | b   |
|  2 |   3 |   3 | c   |
|  3 |   4 |  40 | d   |

但不是方法链接的。非常感谢您的帮助!

6yjfywim

6yjfywim1#

df = pd.DataFrame({"a": [1, 2, 3, 4], "b": [10, np.nan, np.nan, 40], "c": ["a", "b", "c", "d"]})
df['b'] = df.b.fillna(df.a)
    
|    |   a |   b | c   |
|---:|----:|----:|:----|
|  0 |   1 |  10 | a   |
|  1 |   2 |   2 | b   |
|  2 |   3 |   3 | c   |
|  3 |   4 |  40 | d   |
zdwk9cvp

zdwk9cvp2#

我找到的一个解决方案是使用pyjanitor库:

import pandas as pd
import pyjanitor 

df = pd.DataFrame(
    {"a": [1, 2, 3, 4], "b": [10, np.nan, np.nan, 40], "c": ["a", "b", "c", "d"]}
)
df.case_when(
    lambda x: x["b"].isna(), lambda x: x["a"], lambda x: x["b"], column_name="b"
)

这里,case_when(...)可以被集成到一个操作链中,并且我们仍然将整个 Dataframe 保留在该链中。
我想知道如果没有pyjanitor,这怎么可能完成。

相关问题