返回指定值(以熊猫为单位)的列名

时间:2019-10-07 05:38:09

标签: python pandas

我的问题是this question的扩展名。尽管询问的问题相同,但答案仅适用于非常具体的情况。

假设数据集相同,我想添加列名称包含特定值的列

Date               col1    col2    col3    col4    col5    col6    col7 
01/01/2016 00:00   37.04   36.57   35.77   37.56   36.79   35.90   38.15 

但是,我有很多行,并且我想查找的值既不是最大值也不是最小值(例如,我要使用36.79的列名命名)。

1 个答案:

答案 0 :(得分:1)

您可以比较#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { printf("%d\n",argc); printf("%s\n",argv[0]); return 0; } 的所有值并通过DataFrame.any测试至少一个DataFrame-然后将掩码用于过滤器列名称:

True

但是,因为使用浮点数和可能的some accuracy problems更好地将numpy.isclose与仅选择数字列一起使用:

c = df.columns[(df == 36.79).any()].tolist()

示例

#if possible some non numeric columns
df1 = df.select_dtypes(np.number)
c = df1.columns[np.any(np.isclose(df1, 36.79), axis=0)].tolist()

#if all columns are numeric
c = df.columns[np.any(np.isclose(df, 36.79), axis=0)].tolist()

如果可能的话,最后一个如果想要第一个匹配值的话,将print (df) Date col1 col2 col3 col4 col5 col6 col7 0 01/01/2016 00:00 37.04 36.57 35.77 37.56 36.79 35.9 38.15 1 01/02/2016 00:00 37.04 36.57 35.77 37.56 36.79 35.9 36.79 <-last value changed df1 = df.select_dtypes(np.number) c = df1.columns[np.any(np.isclose(df1, 36.79), axis=0)].tolist() print (c) ['col5', 'col7'] next一起使用,如果空列表(不匹配值)可以通过默认值:

iter

print (next(iter(c), 'no match'))
col5