如何过滤掉不等于Python中cases的pandas数据帧记录?

2024-09-30 11:32:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个pandas数据帧,包含超过10k条记录。我希望将具有所有名称的行保存在名称列表中的另一个事例中。一个id可以等于多个大小写。在

Id 2在输出中,因为bla2bla3bla4等于name列表中的case 1。Id 5在输出中,因为bla6和{}等于name列表中的case 4。 Id 1不在输出中,因为它没有bla3和{}(case 2)。等等。。在

输入

id | name | [A LOT OF OTHER COLUMNS] |
--------------------------------------
1  | bla1 | [A LOT OF OTHER COLUMNS] |
2  | bla2 | [A LOT OF OTHER COLUMNS] |
2  | bla3 | [A LOT OF OTHER COLUMNS] |
2  | bla4 | [A LOT OF OTHER COLUMNS] |
3  | bla5 | [A LOT OF OTHER COLUMNS] |
4  | bla9 | [A LOT OF OTHER COLUMNS] |
5  | bla6 | [A LOT OF OTHER COLUMNS] |
5  | bla7 | [A LOT OF OTHER COLUMNS] |
6  | bla8 | [A LOT OF OTHER COLUMNS] |

所需输出

^{pr2}$

因为

names [
  [bla2, bla3, bla4], #case 1
  [bla1, bla3, bla7], #case 2
  [bla3, bla1, bla6], #case 3
  [bla6, bla7] #case 4
]

Tags: columnsofname名称id列表lotother
2条回答

你可以用面具

 acceptable = set([name1, name 2...])
 df[df[name] in acceptable]

您可以将filtration与修改过的original solution和{a3}一起使用,以返回至少一个True

def f(x):
    a = any([(x['name'].isin(y)).all() & pd.Series(y).isin(x['name']).all() for y in names])
    return (a)

df1 = (df.groupby('id').filter(f))

print (df1)
   id  name  [A LOT OF OTHER COLUMNS]
1   2  bla2  [A LOT OF OTHER COLUMNS]
2   2  bla3  [A LOT OF OTHER COLUMNS]
3   2  bla4  [A LOT OF OTHER COLUMNS]
6   5  bla6  [A LOT OF OTHER COLUMNS]
7   5  bla7  [A LOT OF OTHER COLUMNS]

相关问题 更多 >

    热门问题