假设我具有以下数据集
data = {
'date': ['1/1/2019', '1/2/2019', '1/3/2019', '1/4/2019', '1/1/2019', '1/2/2019', '1/3/2019', '1/4/2019'],
'account_id': [1, 1, 1, 1, 2, 2, 2, 2],
'value_1': [1, 2, 3, 4, 5, 6, 7, 8],
'value_2': [1, 3, 6, 9, 10, 12, 14, 16],
'value_1.1': [5, 5, 5, 5, 5, 5, 5, 5],
'value_2.1': [0, 0, 0, 0, 0, 0, 0, 0]
}
df = pd.DataFrame(data,index = data['date']).drop('date', 1)
df
我如何根据以下逻辑来裁剪value_1和value_2列:
-对于value_1,上限= value_1.1,下限=无
-对于value_2,上限=无,下限= value_2.1?
我当时正在考虑使用……
np.where conditions, like np.where(df['value_1']>=value_1.2, value_1, df['value_1'])
和
np.where(df['value_2']<=value_2.1, 0, df['value_2'])
这有意义吗?
答案 0 :(得分:1)
由于您已经在df中确定了边界的边界,所以我会这样做
df['value_1']=df.filter(like='value_1').min(1)
df['value_2']=df.filter(like='value_2').max(1)
答案 1 :(得分:0)
您可能要使用pd.DataFrame.clip
:
df['value1'] = df['value_1'].clip(upper=df['value_1.1'])
df['value2'] = df['value_2'].clip(lower=df['value_2.1'])