我正试图找到一种方法,使我能够选择/过滤标题中包含一个特定字符串和列中另一个字符串的列。
我对快速选择列和与所选列相关的行的方法有点困惑。
假设以下 Dataframe df:
Country/Region Record ID
0 France 118
1 France 110
2 United Kingdom 146
3 United Kingdom 836
4 France 944
我在想:
condition_1 --〉筛选标题condition_2中包含“国家/地区”的列--〉筛选国家/地区为“法国”的行
可以用一个.loc[]
和/或def或lambda函数来实现吗?我需要在我的过程中对几个组合和条件进行乘法运算。
我曾试图把以下几点结合起来,但没有成功:country_condition = lambda df, string: df.filter(regex=string)
df.loc[country_condition==True, :]
或df[df.filter(regex='Country') == 'France']
所以任何帮助都将不胜感激。
我希望能够给予标题需要包含的字符串(此处为“Country”)和此列的行需要包含的字符串(此处为“France”),以便得到:
Country/Region Record ID
0 France 118
1 France 110
4 France 944
3条答案
按热度按时间jmo0nnb31#
一个可能的解决方案,它应该与多列的标题中的
Country
:输出:
wb1gzix02#
最简单的方法就是保持数据不变,并以标准方式进行查询:
df.filter(regex=...)
所做的是选择与正则表达式匹配的数据框列,这与运行df[[i for i in df.columns if re.match(..., i)]]
相同,但您说您有多个列,它们可能不都以相同的名称开头:df.filter
可能遇到存在多个匹配的问题。过滤器的结果可以减少维度与任何横向(即水平)。我不能完全说为什么你会这样做,但是,因为你会留下不一致的列。
最好从一开始就将它们重命名为:
643ylb083#
如果您已经知道要查找的列的列名和值,则只需使用
df[df['Country/Region'] == 'France']
但我觉得你的问题要复杂得多。
第一个条件,我们需要列名列表。
接下来我们检查这些列中的“France”,因为cols是一个列表,所以我们一个接一个地检查并连接结果。
完整代码示例:
印刷品: