我正在尝试使用numpy根据某些条件在数据框中添加新列,因此该框看起来像。
import pandas as pd
import numpy as np
rawData = ({'a': [None,2,3], 'b': [5,6,8],'currency':['AUD','SA','NZD']})
df = pd.DataFrame(rawData)
print(df)
a b currency
0 NaN 5 AUD
1 2.0 6 SA
2 3.0 8 NZD
根据条件添加列:
mask1 = df['currency'].isin(['AUD'])
choice_mask1 = df['a']
mask2 = df['currency'].isin(['SA','NZD'])
choice_mask2= df['b']
df['c'] = np.select([mask1,mask2],[choice_mask1,choice_mask2],default = 0.00)
print(df)
a b currency c
0 NaN 5 AUD NaN
1 2.0 6 SA 6.0
2 3.0 8 NZD 8.0
因此,C列中的输出具有NaN值,这是我不想要的。因此,如果列a中存在NaN,则新添加的列需要考虑列b中的值。
我在使用numpy时很新,所以请帮助我。
您可以简化代码
df['c'] = 0
cond = (df['currency'].isin(['AUD'])) & (df['a'].notnull())
df['c'] = np.where(cond, df['a'], df['b'])
a b currency c
0 NaN 5 AUD 5.0
1 2.0 6 SA 6.0
2 3.0 8 NZD 8.0
编辑:正如@ Ben.T所指出的,如果您正在查看具有不同货币的观察值,则需要调整条件。
rawData = ({'a': [None,2,3, 5, 3], 'b': [5,6,8, 1,6],'currency':['AUD','SA','NZD', 'AUD', 'US']})
df = pd.DataFrame(rawData)
df['c'] = 0
cond1 = (df['currency'].isin(['AUD'])) & (df['a'].notnull())
cond2 = (df['currency'].isin(['SA','NZD'])) | (df['currency'].isin(['AUD'])) & (df['a'].isnull())
df.loc[cond1, 'c'] = df['a']
df.loc[cond2, 'c'] = df['b']
a b currency c
0 NaN 5 AUD 5.0
1 2.0 6 SA 6.0
2 3.0 8 NZD 8.0
3 5.0 1 AUD 5.0
4 3.0 6 US 0.0
或使用np.select
mask1 = (df['currency'].isin(['AUD'])) & (df['a'].notnull())
choice_mask1 = df['a']
mask2 = (df['currency'].isin(['SA','NZD'])) | (df['currency'].isin(['AUD'])) & (df['a'].isnull())
choice_mask2= df['b']
df['c'] = np.select([mask1,mask2],[choice_mask1,choice_mask2],default = 0.00)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句