如果列B为真,则从列A中提取值

时间:2017-10-22 18:04:46

标签: python pandas

给出货币数据框:

Pair   | Amount
EUR/USD| 100,000
USD/EUR| 200,000
USD/JPY|  50,000

如果Pair"USD/EUR",我将如何将Amount提取到新列中,以便:{/ p>

Pair   | Amount |Dollars
EUR/USD| 100,000|0
USD/EUR| 200,000|200,000
CHF/JPY|  50,000|0

我确定在Pandas有一个很好的方法可以做到这一点,但到目前为止我还是一个新手。

3 个答案:

答案 0 :(得分:7)

import numpy as np 
df.assign(Dollars=np.where(df['Pair']=='USD/EUR',df['Amount'],0))
Out[383]: 
   Pair       Amount   Dollars
0  EUR/USD   100,000         0
1  USD/EUR   200,000   200,000
2  USD/JPY    50,000         0

编辑:

df.assign(Dollars=np.where(df['Pair'].isin(['USD/EUR','EUR/USD']),df['Amount'],0))

Out[830]: 
   Pair       Amount   Dollars
0  EUR/USD   100,000   100,000
1  USD/EUR   200,000   200,000
2  USD/JPY    50,000         0

定义您想要的费率df['Rate']=[1,2,3]

df.assign(Dollars=np.where(df['Pair'].isin(['USD/EUR','EUR/USD']),df['Amount']*df['Rate'],0))
Out[870]: 
   Pair      Amount  Rate  Dollars
0  EUR/USD   100000     1   100000
1  USD/EUR   200000     2   400000
2  USD/JPY    50000     3        0

答案 1 :(得分:4)

可能不是最优雅的,但这会添加Dollars

df['Dollars'] = df['Amount'].where(df['Pair']=='USD/EUR').fillna(0)

答案 2 :(得分:2)

您还可以使用assign,然后使用fillna

df.assign(Dollars = lambda x: x.loc[x['Pair'] == 'EUR/USD', 'Amount']).fillna(0)

但是,这将提供浮点数。您可能需要将该列转换回int