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

Python 如果列B为真,则从列A提取值,python,pandas,Python,Pandas,给定货币数据帧: Pair | Amount EUR/USD| 100,000 USD/EUR| 200,000 USD/JPY| 50,000 例如,如果Pair是“USD/EUR”,我如何将金额提取到一个新列中,以便: Pair | Amount |Dollars EUR/USD| 100,000|0 USD/EUR| 200,000|200,000 CHF/JPY| 50,000|0 我相信在熊猫身上有一个很好的方法可以做到这一点,但到目前为止,我还是一个新手。可能不是最优

给定货币数据帧:

Pair   | Amount
EUR/USD| 100,000
USD/EUR| 200,000
USD/JPY|  50,000
例如,如果
Pair
“USD/EUR”
,我如何将
金额
提取到一个新列中,以便:

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

我相信在熊猫身上有一个很好的方法可以做到这一点,但到目前为止,我还是一个新手。

可能不是最优雅的,但这会增加
美元

df['Dollars'] = df['Amount'].where(df['Pair']=='USD/EUR').fillna(0)
您还可以使用后跟

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

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
定义一个你想要的mul
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

Pair是列表还是字符串?Pair是字符串。
pd.Series.where
有第二个参数,您可以在掩码不为True的情况下提供要使用的值。where(df['Pair']='USD/EUR',0)这是一个简洁的解决方案。如何针对多个条件修改它?如果我想检查
欧元/美元
美元/欧元
美元/日元
@Khaine775,那么您需要isin,在
isin?
中所述的不同条件下,可能会有不同的结果,例如,
isin(['USD/EUR','EUR/USD'])、df['Amount']
'USD/EUR'
上匹配时,但
df[“金额”]*2
例如,当在
'EUR/USD'
上匹配时,我假设它需要一种不同于
isin
的方法,例如定义两个不同的列表,并将它们放入
where
语句中,但我想知道是否有一种更干净的方法来处理
isin
@Khaine775就像你需要汇率一样?@Khaine775正如你所说,你的真实汇率更复杂,没有看到这一点,这是我所能提供的一切~抱歉-(
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