Pandas:合并具有重复索引的数据帧

时间:2021-06-30 12:33:27

标签: python pandas dataframe merge concatenation

我想合并共享一个公共索引的两个数据集。在我的真实数据中,这个索引是一个序列号,并且是重复的。序列号对应于一辆车,每次使用该车辆行驶时都会重复该序列号。所以根据出行情况会有不同的特征值。

这是一个例子:

df1 = pd.DataFrame(
    {
        "A": ["A0", "A1", "A2", "A3"],
        "B": ["B0", "B1", "B2", "B3"],
        "C": ["C0", "C1", "C2", "C3"],
        "D": ["D0", "D1", "D2", "D3"],
    },
    index=["a", "a", "b", "b"],
)

df1

>>
    A   B   C   D
a   A0  B0  C0  D0
a   A1  B1  C1  D1
b   A2  B2  C2  D2
b   A3  B3  C3  D3


df2 = pd.DataFrame(
    {
        "A2": ["A4", "A5", "A6", "A7"],
        "B2": ["B4", "B5", "B6", "B7"],
        "C2": ["C4", "C5", "C6", "C7"],
        "D2": ["D4", "D5", "D6", "D7"],
    },
    index=["a", "b", "b", "b"],
)
​
df2

>>
    A2  B2  C2  D2
a   A4  B4  C4  D4
b   A5  B5  C5  D5
b   A6  B6  C6  D6
b   A7  B7  C7  D7

我正在努力寻找出现这两个数据集的最佳方式。除了索引之外,它们不共享更多常见信息。所以我想尽可能多地使用两者,但也避免不必要的重复。

我尝试过:

df1.join(df2)

>>
    A   B   C   D   A2  B2  C2  D2
a   A0  B0  C0  D0  A4  B4  C4  D4
a   A1  B1  C1  D1  A4  B4  C4  D4
b   A2  B2  C2  D2  A5  B5  C5  D5
b   A2  B2  C2  D2  A6  B6  C6  D6
b   A2  B2  C2  D2  A7  B7  C7  D7
b   A3  B3  C3  D3  A5  B5  C5  D5
b   A3  B3  C3  D3  A6  B6  C6  D6
b   A3  B3  C3  D3  A7  B7  C7  D7

但是正如您所看到的,对于每个 df1,我将 df2 的所有行添加到 df1 的每一行中...我认为这并没有错...但考虑到我的数据集的大小 (3GB)最终会产生不必要的观察结果......所以我想尽可能避免这种情况。

我也尝试过:

pd.concat([df1, df2], axis=1, join="inner")

但由于我有重复的序列号索引,它返回一个错误:

InvalidIndexError: Reindexing only valid with uniquely valued Index objects

合并这两个重复索引数据集的最佳方法是什么?换句话说,为了保留来自两个数据集的信息并最大限度地减少重复(显着影响数据大小),最佳输出应该是什么?

0 个答案:

没有答案
相关问题