从具有列名称的Series的数据框中获取价值

时间:2019-06-14 21:34:45

标签: python pandas dataframe

我有一个带有日期索引和列名的DataFrame。

df1 = 
date       col1  col2  col3
20190101   1     2     3
20190102   6     5     4
20190103   -7    -9    -8
20190104   4     9     8

,然后得到带有索引子集的Series和一个列名,该列名的每一行的最大值都大于0。这样。

max_col = 
20190101   col3
20190102   col1
20190104   col2

我想要一个结果,其结果为max_col中的列名。

max_val = 
20190101   3
20190102   6
20190104   9

我尝试使用df1.loc[max_col]df1.at[max_col],但最接近的是df1[max_col]。但这会创建矩阵而不是矢量响应。

有什么想法吗?

编辑:

max_col中的值来自另一个DataFrame df2。 因此,max_val不必是df1的最大值。我的错。

使用df1.lookup(max_col.index, max_col)的解决方案效果很好。

1 个答案:

答案 0 :(得分:0)

在您的初始df中,只需使用df.max(1)。然后,过滤掉所有为负的值。

s = df.max(1)
s[s>0]

返回

date
20190101    3
20190102    6
20190104    9
dtype: int64

但是,如果您真的想使用max_col系列,请查看df.lookup的定义

df.lookup(max_col.index, max_col)