当前,如果另一列中存在某些值,则尝试更改数据框中的某些市场值。我只熟悉用于创建新列的列表理解,但是我不确定这样做是否可行。

我尝试了以下功能,尽管不起作用:


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_alist_b。对于每次观察,如果a中存在list_a,则将其乘以0.5,然后将其返回到c列中。如果a b中存在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)

最佳答案

使用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

关于python - 基于条件的新列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55314073/

10-12 23:33