我有一个非常简单的问题 - 我认为 - 但似乎我无法理解这个问题。我是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
但我找不到如何在“value”列中显示列名称,而不是值...我考虑使用布尔索引(将“value”列的值与每行进行比较),但我还没有弄清楚如何做到这一点。
更明确地说,我希望它是:
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
感谢任何帮助(和解释)!