当前如果另一列中存在某些值,则尝试更改数据框中的某些市场值。我只熟悉用于创建新列的列表理解,但是我不确定这样做是否可行。
我尝试了以下功能,尽管不起作用:
def multiply_with(x):
if df['a'] in list_multiple_double:
x = x * 0.5
elif df['a'] in list_multiple_triple:
x = x * 0.33
else:
x = x
return x
我尝试将其应用于“市场价值”列,但没有运气。
假设在pd.dataframe中有两列a和b,我想创建c。还要假设2个列表,list_a
和list_b
。对于每个观察,如果a
中存在list_a
,则乘以0.5并将其返回到列c
中。如果a
中存在list_
,则乘以0.333并返回c
。如果不存在,则在a
中返回c
。我需要以下内容:
list_a = ['Denmark Sweden', 'Norway Sweden']
list_b = ['Denmark Sweden Norway']
values = [200,300,500,1000,200]
country = ['Denmark', 'Denmark Sweden', 'Denmark Sweden Norway', 'Sweden', 'Norway']
values_adj = [200, 150, 166.67, 1000, 200]
df = pd.DataFrame()
df['values'] = pd.Series(values)
df['country'] = pd.Series(country)
df['values_adj'] = pd.Series(values_adj)
答案 0 :(得分:2)
df['values_adj'] = df['values']
df.loc[df['country'].isin(list_a), 'values_adj'] *= 0.5
df.loc[df['country'].isin(list_b), 'values_adj'] *= 0.33
答案 1 :(得分:2)
使用np.select:
df['values_adj'] = np.select([df['country'].isin(list_a), df['country'].isin(list_b)], [df['values']*0.5, df['values']*0.333], df['values'])
print(df)
输出:
values country values_adj
0 200 Denmark 200.0
1 300 Denmark Sweden 150.0
2 500 Denmark Sweden Norway 166.5
3 1000 Sweden 1000.0
4 200 Norway 200.0