【问题标题】:Identifying overlapping rows in multiple dataframes识别多个数据框中的重叠行
【发布时间】:2017-01-31 07:12:53
【问题描述】:

我有两个像

这样的数据框

df1

Time      accler
19.13.33  24
19.13.34  24
19.13.35  25
19.13.36  27
19.13.37  25
19.13.38  27
19.13.39  25
19.13.40  24

df2

 Time      accler
19.13.29  24
19.13.30  24
19.13.31  25
19.13.32  27
19.13.33  25
19.13.34  27
19.13.35  25
19.13.36  24

这两个数据帧在 19.13.33 到 19.13.36 的列时间上重叠。因此,当有重叠时,我只想要由重叠行组成的数据框

预期输出

df1

 Time      accler
19.13.33  24
19.13.34  24
19.13.35  25
19.13.36  27

df2

Time      accler
19.13.33  25
19.13.34  27
19.13.35  25
19.13.36  24

或者我也可以拥有数据帧的concat,这将有助于进一步处理。

我尝试了merge,但没有成功,因为数据帧是根据 csv 文件的数量动态创建的。我尝试首先连接所有数据帧并尝试遍历行但没有找到方法。

【问题讨论】:

  • 尝试在“时间”列上进行内部连接

标签: python pandas merge inner-join concat


【解决方案1】:

可以使用merge,默认参数how='inner'可以省略:

df = pd.merge(df1, df2, on='Time')
print (df)
       Time  accler_x  accler_y
0  19.13.33        24        25
1  19.13.34        24        27
2  19.13.35        25        25
3  19.13.36        27        24

df1 = df[['Time','accler_x']].rename(columns={'accler_x':'accler'})
print (df1)
       Time  accler
0  19.13.33      24
1  19.13.34      24
2  19.13.35      25
3  19.13.36      27

df2 = df[['Time','accler_y']].rename(columns={'accler_y':'accler'})
print (df2)
       Time  accler
0  19.13.33      25
1  19.13.34      27
2  19.13.35      25
3  19.13.36      24

如果您需要merge 多个DataFrames,请使用reduce

#Python 3
import functools

df = functools.reduce(lambda x,y: x.merge(y,on=['Time']), [df1, df2])

#python 2
df = reduce(lambda x,y: x.merge(y,on=['Time']), [df1, df2])

【讨论】:

  • 我尝试使用合并,但我得到的列值重复
  • 问题是你的值被重复了。是否可以按列删除重复的行 Time
  • 实际上我的数据是从手机记录的样本。我每秒收集10个样本。因此,如果我要合并,我将获得 30 个样本。
  • 我添加了合并多个Dataframes的解决方案,请检查一下。
  • 感谢您的回答
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-27
  • 1970-01-01
  • 1970-01-01
  • 2021-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多