gpt4 book ai didi

python-3.x - 根据多列中的值过滤 Pandas 数据框

转载 作者:行者123 更新时间:2023-12-04 00:10:14 26 4
gpt4 key购买 nike

我有一个包含 472 列的数据框。在这 99 列中,有 dxpoa1、dxpoa2、...、dxpoa99。我想过滤掉 dxpoa 列的值为 7 或 N 或仅空白的数据帧行。 dxpoa 可以有许多值,如 Y、W、E、1、7、N 等。或者它们保持空白。只有那些 dxpoa 只有 7 或 N 的行才应该从数据框中过滤掉。数据集很大,有数十万行。因此,一种有效的方法将受到赞赏。

    a  b  c dxpoa1 dxpoa2 dxpoa3 dxpoa4
0 0 A X W N X
1 Z W 2 7 7
2 7 W N W W 1 Z
3 1 7 E N N N N
4 Y 0 W N X 1
5 N X 1 E 1 Z 7
6 1 X 7 0 A W A
7 X X Z X N A 1
8 7 1 A N X Z N
9 N A Z N N N
10 A N Z 7 0 A E
11 E N A Z N N 1
12 E A 1 Z E E W
13 N W Z E X A 0
14 Y 1 A W A E X

我想从数据框中删除第 1、3、9 行。

我试过很多方法,比如:

df_col = [list of dxpoa column names]
df1 = df[df_col].isin(["Y", "W", "1", "E"]).values

它不会过滤掉。

最佳答案

更新:

您可以用NaN7N 替换空字符串,然后使用isin:

In [196]: df[~df[cols].replace('',np.nan).isin(['7','N', np.nan]).all(axis=1)]
Out[196]:
a b c dxpoa1 dxpoa2 dxpoa3 dxpoa4
0 0 A X W N X
2 7 W N W W 1 Z
4 Y 0 W N X 1
5 N X 1 E 1 Z 7
6 1 X 7 0 A W A
7 X X Z X N A 1
8 7 1 A N X Z N
10 A N Z 7 0 A E
11 E N A Z N N 1
12 E A 1 Z E E W
13 N W Z E X A 0
14 Y 1 A W A E X

旧答案:

显示那些包含7N

In [197]: df.loc[df[cols].isin(['7','N']).any(axis=1)]
Out[197]:
a b c dxpoa1 dxpoa2 dxpoa3 dxpoa4
0 0 A X W N X
1 Z W 2 7 7
3 1 7 E N N N N
4 Y 0 W N X 1
5 N X 1 E 1 Z 7
7 X X Z X N A 1
8 7 1 A N X Z N
9 N A Z N N N
10 A N Z 7 0 A E
11 E N A Z N N 1

删除那些包含7N

In [198]: df.loc[~df[cols].isin(['7','N']).any(axis=1)]
Out[198]:
a b c dxpoa1 dxpoa2 dxpoa3 dxpoa4
2 7 W N W W 1 Z
6 1 X 7 0 A W A
12 E A 1 Z E E W
13 N W Z E X A 0
14 Y 1 A W A E X

any 替换为 all 如果您想要/排除那些 all 列应包含 7N

设置:

rows = 15

s = [''] + list('YWE17N0AZX')
df = pd.DataFrame(np.random.choice(s, size=(rows, 7)), columns=list('abc') + ['dxpoa1', 'dxpoa2', 'dxpoa3', 'dxpoa4'])

cols = df.filter(like='dxpoa').columns

关于python-3.x - 根据多列中的值过滤 Pandas 数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37056445/

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