Pandas系列,每个值的列名都高于最小值

时间:2016-04-23 14:33:15

标签: python pandas

我尝试从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)来获取每行的最小列名,但我现在已经知道如何解决这个更复杂的问题了。

感谢您的帮助或提示!

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