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