我尝试从DataFrame中获取一个新系列。此系列应包含DataFrame值的列名,这些值高于DataFrame每行的某个值。但是从DataFrame的左边开始,就像这样:
df = pd.DataFrame(np.random.randint(0,10,size=(5, 6)), columns=list('ABCDEF'))
>>> df
A B C D E F
0 2 4 6 8 8 4
1 2 0 9 7 7 1
2 1 7 7 7 3 0
3 5 4 4 0 1 7
4 9 6 1 5 1 5
min = 3
预期产出:
0 B
1 C
2 B
3 A
4 A
dtype: object
这里输出的第0行是“B”,因为在DataFrame行索引0列中,“B”是最左边的列,其值等于或大于min = 3
。
我知道我使用df.idxmin(axis = 1)
来获取每行的最小列名,但我现在已经知道如何解决这个更复杂的问题了。
感谢您的帮助或提示!
答案 0 :(得分:1)
UPDATE - 每行中第一个元素的索引,满足条件:
来自@DSM的更优雅,更高效的版本:In [156]: (df>=3).idxmax(1)
Out[156]:
0 B
1 C
2 B
3 A
4 A
dtype: object
我的版本:
In [149]: df[df>=3].apply(lambda x: x.first_valid_index(), axis=1)
Out[149]:
0 B
1 C
2 B
3 A
4 A
dtype: object
旧答案 - 每行最小元素的索引:
In [27]: df[df>=3].idxmin(1)
Out[27]:
0 E
1 A
2 C
3 C
4 F
dtype: object