gpt4 book ai didi

python - 按参数列表过滤数据帧

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

得到一个像这样的数据框:

pd.DataFrame({"type":["type1","type1","type1","type2","type2","type2","type1/type2","type1/type2","type1/type2"],
"id": [1,2,3,1,2,3,1,2,3],
"values":[1,np.nan,7,np.nan,5,np.nan,1,1,1]})

:

<表类=“s-表”><标题>类型id值 <正文>类型111类型12NaN类型137类型21NaN类型225类型23NaN类型1,类型211类型1,类型221类型1,类型231

我有一个像这样的“指南”(带有它们对应的 id 的类型):

type1 = [1,3]
type2 = [2,3]
type1,type2 = [1,2,3]

我想根据此列表过滤行(您可以看到有两种可能的情况:需要过滤 type1-id2 = NaN,但 type2-id3=NaN - 是一个有效值)

我怎样才能以最好的方式执行此操作?事实上,我有更大的 table 和更多的指南列表。

最佳答案

我建议创建字典,然后使用np.logical_or.reduce进行选择通过字典中的值循环 Series.eq对于 ==Series.isin如需查看成员(member)资格,请最后发送至 boolean indexing :

d = {}
d['type1'] = [1,3]
d['type2'] = [2,3]
d['type1/type2'] = [1,2,3]
print (d)
{'type1': [1, 3], 'type2': [2, 3], 'type1/type2': [1, 2, 3]}

m = np.logical_or.reduce([df['type'].eq(k) & df['id'].isin(v) for k, v in d.items()])

df = df[m]
print (df)
type id values
0 type1 1 1.0
2 type1 3 7.0
4 type2 2 5.0
5 type2 3 NaN
6 type1/type2 1 1.0
7 type1/type2 2 1.0
8 type1/type2 3 1.0

另一种方法是创建新的 DataFrame 并合并所有与原始数据相交的列,这里是 typeid 列:

d = {}
d['type1'] = [1,3]
d['type2'] = [2,3]
d['type1/type2'] = [1,2,3]
print (d)

df1 = pd.DataFrame([(k, x) for k, v in d.items() for x in v], columns=['type','id'])
print (df1)
type id
0 type1 1
1 type1 3
2 type2 2
3 type2 3
4 type1/type2 1
5 type1/type2 2
6 type1/type2 3

df = df.merge(df1)
print (df)
type id values
0 type1 1 1.0
1 type1 3 7.0
2 type2 2 5.0
3 type2 3 NaN
4 type1/type2 1 1.0
5 type1/type2 2 1.0
6 type1/type2 3 1.0

关于python - 按参数列表过滤数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66964820/

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