【发布时间】:2019-02-27 02:47:18
【问题描述】:
我有一个非常简单的问题——我想——但我似乎无法解决这个问题。我是 Python 和 Pandas 的初学者。我搜索了论坛,但找不到适合我需要的(最近的)答案。
我有一个这样的数据框:
df = pd.DataFrame({'A': [1.1, 2.7, 5.3], 'B': [2, 10, 9], 'C': [3.3, 5.4, 1.5], 'D': [4, 7, 15]}, index = ['a1', 'a2', 'a3'])
这给出了:
A B C D
a1 1.1 2 3.3 4
a2 2.7 10 5.4 7
a3 5.3 9 1.5 15
我的问题很简单:我想添加一列,给出每行的秒最大值的列名。
我写了一个简单的函数,它返回每行的第二个最大值
def get_second_best(x):
return sorted(x)[-2]
df['value'] = df.apply(lambda row: get_second_best(row), axis=1)
这给出了:
A B C D value
a1 1.1 2 3.3 4 3.3
a2 2.7 10 5.4 7 7.0
a3 5.3 9 1.5 15 9.0
但我找不到如何在“值”列中显示列名,而不是值...我正在考虑布尔索引(将“值”列值与每一行进行比较),但是我还没想好怎么做。
为了更清楚,我希望它是:
A B C D value
a1 1.1 2 3.3 4 C
a2 2.7 10 5.4 7 D
a3 5.3 9 1.5 15 B
感谢任何帮助(和解释)!
【问题讨论】:
标签: python pandas sorting numpy dataframe