2016-09-01 12 views
2

パンダ複数の条件を使用して置き換えます。私は今、別の列を追加したい見つけて、私は、次のデータフレーム(DF)しているのpython

df['upper_limit'] = df[['pop_1','pop_2']].max(axis=1) 

:私は、追加の列を「upper_limit」

loc pop_1 source_1 pop_2 source_2 
a 99 group_a 77 group_b 
b 93 group_a 90 group_b 
c 58 group_a 59 group_b 
d 47 group_a 62 group_b 

を作成'upper_limit'の値を調べ、それらをpop_1とpop_2と比較し、一致するときにsource_1またはsource_2からテキストを選択します。すなわち:

loc pop_1 source_1 pop_2 source_2 upper_limit source 
a 99 group_a 77 group_b 99 group_a 
b 93 group_a 90 group_b 93 group_a 
c 58 group_a 59 group_b 59 group_b 
d 47 group_a 62 group_b 62 group_b 

私はpop_1から辞書を作成してsource_1しようとしている。その後、

table_dict = df[['pop_1','source_1']] 
z = table_dict.to_dict 

そして使用して、これをマップ:

df['source'] = 'n/a' 
df['source'].replace(z,inplace=True) 

これは、データフレームを返しますが、列に'ソース'はn/aの結果のみを表示します。

答えて

1

私は今、「upper_limit」の値を見て別の列を追加したい、pop_1とpop_2するためにそれらを比較して、両者が一致したときにsource_1またはsource_2からテキストを選択します。

は、あなたは、単にnp.whereを使用して、それははるかに操作を行うことができます。

In [19]: import numpy as np 

In [20]: df['upper_limit source'] = np.where(df.upper_limit == df.pop_1, df.source_1, df.source_2) 

In [20]: df 
Out[20]: 
    loc pop_1 pop_2 source_1 source_2 upper_limit upper_limit source 
0 a  99  77 group_a group_b   99   group_a 
1 b  93  90 group_a group_b   93   group_a 
2 c  58  59 group_a group_b   59   group_b 
3 d  47  62 group_a group_b   62   group_b 
関連する問題