我的问题是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的列名命名)。
答案 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