2017-09-04 4 views
0

のセットからのリターンの最大列が、私は新しい列、「max_bcd」を作成したい、とこのしまうのは、私は、列A、B、C、Dパイソン:列

import pandas as pd 
import numpy as np 
## create dataframe 100 by 4 
df = pd.DataFrame(np.random.randn(100,4), columns=list('ABCD')) 
df.head(10) 

とのデータフレームがあるとしましょうその特定の行について、その3つの列のうちの1つが最大値を含むことを示す 'b'、 'c'、 'd'と表示されます。

誰でもその方法を知っていますか?

答えて

1
import pandas as pd 
import numpy as np 

cols = ['B', 'C', 'D'] 
## create dataframe 100 by 4 
df = pd.DataFrame(np.random.randn(100,4), columns=list('ABCD')) 
df.head(10) 
df.insert(4, 'max_BCD_name', None) 
df.insert(5, 'max_BCD_value', None) 
df['max_BCD_name'] = df.apply(lambda x: df[cols].idxmax(axis=1)) # column name 
df['max_BCD_value'] = df.apply(lambda x: df[cols].max(axis=1)) # value 
print(df) 

編集:ちょうどのみBのあなたの条件を見て、CおよびDは、そのためのコードを追加しました。

出力:

  A   B   C   D max_BCD_name max_BCD_value 
0 -0.653010 -1.479903 3.415286 -1.246829   C  3.415286 
1 0.343084 1.243901 0.502271 -0.467752   B  1.243901 
2 0.099207 1.257792 -0.997121 -1.559208   B  1.257792 
3 -0.646787 1.053846 -2.663767 1.022687   B  1.053846 
2

axis=1このIDMAXはcolumnnsの中の最大値を見つけるのに役立ちますしてみてください。

>>> df.idxmax(axis=1) 
0 B 
1 C 
2 D 
dtype: object