【发布时间】:2021-04-04 23:21:53
【问题描述】:
我正在尝试使用 pd.concat 从多个数据帧中提取公共行:
>>> import numpy as np
>>> import pandas as pd
>>> x = np.random.random(size=(5, 3))
>>> df1 = pd.DataFrame(x)
>>> df2 = pd.DataFrame(x[1:3])
>>> df3 = pd.DataFrame(x[2:4])
>>> df1
0 1 2
0 0.257662 0.453542 0.805230
1 0.060493 0.463148 0.715994
2 0.452379 0.470137 0.965709
3 0.447546 0.964252 0.163247
4 0.187212 0.973557 0.871090
>>> df2
0 1 2
0 0.060493 0.463148 0.715994
1 0.452379 0.470137 0.965709
>>> df3
0 1 2
0 0.452379 0.470137 0.965709
1 0.447546 0.964252 0.163247
如您所见,只有行 0.452379 0.470137 0.965709 是所有三个数据帧共有的。为了提取它,我尝试了:
>>> pd.concat([df1, df2, df3], join='inner')
0 1 2
0 0.257662 0.453542 0.805230
1 0.060493 0.463148 0.715994
2 0.452379 0.470137 0.965709
3 0.447546 0.964252 0.163247
4 0.187212 0.973557 0.871090
0 0.060493 0.463148 0.715994
1 0.452379 0.470137 0.965709
0 0.452379 0.470137 0.965709
1 0.447546 0.964252 0.163247
因此,join==inner 似乎不起作用!我还应该指出 ignore_index=True 对行为没有影响。在 Real Python 上的 an article 中,建议使用 axis=1。但是,我认为这是错误的:
>>> pd.concat([df1, df2, df3], join='inner', axis=1)
0 1 2 0 1 2 0 1 2
0 0.257662 0.453542 0.805230 0.060493 0.463148 0.715994 0.452379 0.470137 0.965709
1 0.060493 0.463148 0.715994 0.452379 0.470137 0.965709 0.447546 0.964252 0.163247
我所做的有什么问题?另外,如果这种方式不起作用,我将如何从多个数据框中提取公共行?我正在使用 Pandas 0.25.3 版。
【问题讨论】:
-
想要的输出是什么?
-
@U11-Forward :只有公共行的数据框。
标签: python python-3.x pandas dataframe set-intersection