我想合并共享一个公共索引的两个数据集。在我的真实数据中,这个索引是一个序列号,并且是重复的。序列号对应于一辆车,每次使用该车辆行驶时都会重复该序列号。所以根据出行情况会有不同的特征值。
这是一个例子:
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
合并这两个重复索引数据集的最佳方法是什么?换句话说,为了保留来自两个数据集的信息并最大限度地减少重复(显着影响数据大小),最佳输出应该是什么?