【发布时间】:2018-03-22 23:15:50
【问题描述】:
目标是仅用零替换某些列(“capped1”和“capped2”,但不是“signed”)中的所有负值。需要通过正则表达式选择列。 (实际的 df 有 >1000 列名称更复杂)
我想出了:
import pandas as pd
import re
import numpy as np
index = [1,2,3,4]
d = {'capped1': [1,0,-1,np.nan], 'capped2': [2,0,np.nan,-9999],'signed':[2,0,-3,np.nan]}
df = pd.DataFrame(data=d, index=index)
df_right = df.filter(regex=("capped.*")).clip(lower=0)
df_left = df.drop(list(df_right.columns), 1)
df_out = df_left.merge(df_right,left_index=True,right_index=True,how="outer")
df_out
有没有更好的方法来做到这一点?我的猜测是,这可以用一行而不是 3 行替换,您可以直接替换 df 中的值。
【问题讨论】: