Python通过与另一个df/lis比较来过滤数据帧

2024-09-30 06:18:57 发布

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

所以我有一个数据帧字典,我现在把它分解成单个的数据帧,因为我不知道如何直接在字典中处理它。例如,它们是看起来像这样的试样的结果

T01
mm    N    Cycle
a     1      1
b     2      1
c     3      2
d     4      2
e     5      3
...   ...    ...

现在我制作了另一个数据帧(也尝试了列表),如下所示:

Cycles
1
3
5
...

我的目标是过滤掉每一行

Cycle != Cycles

所以我得到一个如下的列表:

mm    N    Cycle
a     1      1
b     2      1
e     5      3
f     6      3
...   ...    ...

我通过以下代码创建了数据帧:

for k,v in data_dict.items():    
    globals()[k] = (v[['mm','N', 'Unnamed: 3']])
    globals()[k].columns = ['mm', 'N', 'Cycles']

现在我有7个不同的数据帧,大小从(2570,3)到(12402,3)不等。你知道吗

我一直在四处寻找,但似乎找不到一个可行的办法。也许我不该用globals()[k]调用?我对python还比较陌生,所以我缺乏很多知识。先谢谢你

编辑:我一直在尝试像这样的布尔操作

 globals()[k].query("Cycle" != Cycles['Cycles'])

或者

 globals()[k][globals()[k].Cycle != Cycles['Cycles']]

但这对我没有任何帮助。你知道吗


Tags: 数据代码in目标列表fordata字典
3条回答

所以你有一个数据帧的dict,我们称之为data_dict和一个循环列表Cycles
你说你不知道如何处理一组数据帧,但是一旦你知道如何处理一个数据帧,那实际上是最简单的部分,因为你只需要在它上面循环。 要解决您的问题,只需使用isin方法:

res = {}
for id, df in data_dict.items():
    #loop over the dataframes in the dict
    res[id] = df[df.Cycle.isin(Cycles)]
    #this is a new dataframe where you have only the cycles in Cycles

假设您有一个要筛选的周期列表:

cycle_list = [1, 2, 3]

现在给定一个dataframes data_dict字典,您可以使用带有布尔掩码的字典理解来筛选满足条件的行:

res = {k: v[v['Cycles'].isin(cycle_list)] for k, v in data_dict.items()}

这假设每个数据帧都有一个Cycles序列。pd.Series.isin返回一系列用于索引数据帧的布尔值。你知道吗

此外,请注意使用globals()的原因非常罕见;您应该尽可能避免调用globals。你知道吗

像这样的?你知道吗

例如,您的数据帧定义为:

测试=pd.数据帧({'mm':['1','b','c','d','e'],'N':[1,2,3,4,5],'Cycle':[1,1,2,2,3]})

测试2=pd.数据帧({'Cycles':[1,3,5]})

要筛选出列:

test3=测试[测试周期.isin(试验2.循环)]

出[19]: 循环N mm 0 1 1 1 1 1 2 b 4 3 5东

相关问题 更多 >

    热门问题