gpt4 book ai didi

python - Pandas:对列的子集应用过滤器

转载 作者:行者123 更新时间:2023-12-03 20:02:22 24 4
gpt4 key购买 nike

假设我有这样的数据:

df = pd.DataFrame({'category': ["blue","blue","blue", "blue","green"], 'val1': [5, 3, 2, 2, 5], 'val2':[1, 3, 2, 2, 5]})
print(df)

category val1 val2
0 blue 5 1
1 blue 3 3
2 blue 2 2
3 blue 2 2
4 green 5 5
我想获取任何值 > 3 的行。对于我这里只有两列的示例,我可以做
df.loc[(df['val1'] > 3) | (df['val2'] > 3)]

category val1 val2
0 blue 5 1
4 green 5 5
现在假设我有一个包含大量(数字)列的数据集,我想获取任何数字列的值满足条件(例如 > 3)的所有行。有没有办法检查多列的条件而不必将它们与 | 链接起来?
因此,例如,假设我有一个名为 val1 到 valn 的 n 列的数据框,并且我希望所有行中 val1 到 valn 中的任何值都大于 3。有没有比这更好的方法/更短的方法
df.loc[(df['val1'] > 3) | (df['val2'] > 3) | ... | (df['valn'] > 3)]
?

最佳答案

您可以使用 df.any() 如下。这适用于任意数量的列(我们忽略第一列“类别”,因为它不是数字):

res=df[(df.iloc[:,1:] >3).any(axis=1)]
您当前数据框的结果是:
>>>print(res)

category val1 val2
0 blue 5 1
4 green 5 5

关于python - Pandas:对列的子集应用过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65465134/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com