gpt4 book ai didi

python - 选择具有特定值的特定列 pandas

转载 作者:行者123 更新时间:2023-11-30 22:32:53 26 4
gpt4 key购买 nike

所以我有一个 30 列的数据框,我想过滤其中 10 列中找到的值,并返回所有匹配的行。在下面的示例中,我想在所有以“good...”结尾的 df 列中搜索等于 1 的值

df[df[[i for i in df.columns if i.endswith('good')]].isin([1])]

df[df[[i for i in df.columns if i.endswith('good')]] == 1]

这两个方法都可以找到这些列,但所有不匹配的内容都显示为 NaN。我的问题是如何查询特定列的特定值并使所有不匹配的行不显示为 NaN?

最佳答案

您可以先使用 str.endswith 过滤列,通过 [] 选择列并通过 eq 进行比较。最后添加any每行至少一个1

cols = df.columns[df.columns.str.endswith('good')]
df1 = df[df[cols].eq(1).any(axis=1)]

示例:

df = pd.DataFrame({'A':list('abcdef'),
'B':[1,1,4,5,5,1],
'C good':[7,8,9,4,2,3],
'D good':[1,3,5,7,1,0],
'E good':[5,3,6,9,2,1],
'F':list('aaabbb')})

print (df)
A B C good D good E good F
0 a 1 7 1 5 a
1 b 1 8 3 3 a
2 c 4 9 5 6 a
3 d 5 4 7 9 b
4 e 5 2 1 2 b
5 f 1 3 0 1 b

cols = df.columns[df.columns.str.endswith('good')]

print (df[cols].eq(1))
C good D good E good
0 False True False
1 False False False
2 False False False
3 False False False
4 False True False
5 False False True

df1 = df[df[cols].eq(1).any(1)]
print (df1)
A B C good D good E good F
0 a 1 7 1 5 a
4 e 5 2 1 2 b
5 f 1 3 0 1 b

您的解决方案非常接近,只需添加 any :

df1 = df[df[[i for i in df.columns if i.endswith('good')]].isin([1]).any(axis=1)]
print (df1)
A B C good D good E good F
0 a 1 7 1 5 a
4 e 5 2 1 2 b
5 f 1 3 0 1 b

编辑:

如果只需要 1 并删除所有其他行和列:

df1 = df.loc[:, df.columns.str.endswith('good')]
df2 = df1.loc[df1.eq(1).any(1), df1.eq(1).any(0)]
print (df2)
D good E good
0 1 5
4 1 2
5 0 1

关于python - 选择具有特定值的特定列 pandas,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45329121/

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