如何使用掩码条件合并pandas/python中的三个不同数据帧?

如何使用掩码条件合并pandas/python中的三个不同数据帧?,python,pandas,dataframe,Python,Pandas,Dataframe,我试图合并三个不同的大数据帧(1400000行),两个数据帧是正常的,第三个数据帧来自这个mask=(df['a'].lt(25)&df['a'].gt(10))| df['b'].gt(0.2)| df['c'].gt(500) df[mask]&df['e'].eq(0)`,根据我下面的样本数据 a b c dt e h i j k 35 0.1 234 2020/6/15 14:27:00

我试图合并三个不同的大数据帧(1400000行),两个数据帧是正常的,第三个数据帧来自这个
mask=(df['a'].lt(25)&df['a'].gt(10))| df['b'].gt(0.2)| df['c'].gt(500)
df[mask]&df['e'].eq(0)`,根据我下面的样本数据

a      b        c       dt                   e   h i j k
35   0.1      234   2020/6/15 14:27:00       0   ........
1    0.1      554   2020/6/15 15:28:00       1   ........
2    0.2      654   2020/6/15 16:29:00       0   ........
23   0.4      2345  2020/6/15 17:26:00       0   ........
34   0.8      245   2020/6/15 18:25:00       0   ........
8    0.9      123   2020/6/15 18:26:00       0
7    0.1      22    2020/6/15 18:27:00       0
2    0.3      99    2020/6/15 18:28:00       0
219  0.2      17    2020/6/15 19:26:00       0
下面的代码将得到许多无用和重复的列,有没有办法合并三个不同的大数据

import pandas as pd
from functools import reduce
df1 = pd.read_csv('test1.csv')
df2 = pd.read_csv('test2.csv')
df = pd.read_csv('test.csv', usecols = ['a', 'b', 'c', 'dt', 'e'])
mask = (df['a'].lt(25) & df['a'].gt(10)) | df['b'].gt(0.2) | df['c'].gt(500)
df['x'] = mask.astype(int)
dfs = [df1, df2, df]
df_full = reduce(lambda left,right: pd.merge(left,right, on=['id']), dfs)

你能添加一些关于数据帧的信息吗?它们有相同的列吗?还是每个框架都有不同的列和不同的行数?我不是问数据本身,而是问它的结构

此外,我对此也不太确定,但请尝试在要从第三个数据帧读取的列中包含
'id'
,因为看起来您正在尝试合并该索引上的所有三个数据帧

usecols = ['id', 'a', 'b', 'c', 'dt', 'e']
(编辑:我尝试在没有该“id”的情况下进行合并,但对我无效。)

我尝试使用自己的CSV文件:

  • test1.csv有一些列(id、a、b、c)
  • test2.csv有不同的列(id、d、e、f)
  • test3.csv的列与问题中的列相同:(id、a、b、c、dt、, (e)

不容易回答,因为
df1、df2
没有样本数据。另外,如果问题是
会导致许多无用的重复列
是否可以使用
usecols
过滤不必要的列,例如
f1=pd.read\u csv('test1.csv',usecols=['need col1','need col2'])
?@jezrael您知道如何合并三个数据帧吗?如果是,你不需要我的df1和df2的样本数据。你的合并代码很好,所以去问吧。代码引用了这个链接,是的,代码很好,问题是数据中是否
会有很多无用的重复列
df1和df2有很多重复列,以及如何删除df1和df2的列?你可以使用
df1=pd.read\u csv('test1.csv',delimiter=“;”,usecols=[…])
df2=pd.read\u csv('test1.csv',delimiter=“;”,usecols=[…])
因此您只读取要合并的列(同时确保在两个列表中都包含
'id'
import pandas as pd

df1 = pd.read_csv('test1.csv', delimiter=";")
df2 = pd.read_csv('test2.csv', delimiter=";")
df = pd.read_csv('test3.csv', delimiter=";", usecols = ['id', 'a', 'b', 'c', 'dt', 'e'])

mask = (df['a'].gt(10) & df['a'].lt(25)) | df['b'].gt(0.2) | df['c'].gt(500)
df['x'] = mask.astype(int)
dfs = [df1, df2, df]

df_merged = df1.merge(df2, on=['id'])
df_merged = df_merged.merge(df, on=['id'])