假设我有一个包含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)
我想创建一个新列“max_bcd”,此列将显示“b”,“c”,“d”,表示对于该特定行,这三列中的一列包含最大值。
有谁知道如何实现这一目标?
答案 0 :(得分:2)
使用axis=1
尝试此idmax将帮助您找到列中的最大值:
>>> df.idxmax(axis=1)
0 B
1 C
2 D
dtype: object
答案 1 :(得分: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