【发布时间】:2021-07-07 02:17:23
【问题描述】:
给定一个示例数据框df:
df = (pd.DataFrame.from_dict({'a':[np.nan, 10, 20],
'b':[np.nan, np.nan, 20],
'c':[np.nan, 30, np.nan],
'c':[40, np.nan, np.nan],
'col':['b','c','a']})
)
a b c col
0 NaN NaN 40.0 b
1 10.0 NaN NaN c
2 20.0 20.0 NaN a
我想fillna(0) 在df 的每一行根据存储在df.col 中的值只选择列。
输出应该是:
a b c col
0 NaN 0.0 40.0 b
1 10.0 NaN 0.0 c
2 20.0 20.0 NaN a
我找到了一个迭代解决方案:
for index, row in df.iterrows():
df.loc[index, row.col] = np.nanmax([df.loc[index, row.col],0])
但它很慢,而且很难使用链式操作(assign 方法)。
是否有另一种,可能是矢量化方式或apply 版本来获得所需的结果?
【问题讨论】:
标签: python pandas dataframe vectorization apply