Pandas合并两个df
Pandas merge two df
我有两个DataFrame
df1 具有以下形式
ID col1 col2
0 1 2 10
1 3 1 21
df2 看起来像这样
ID field1 field2
0 1 4 1
1 1 3 3
2 3 5 4
3 3 9 5
4 1 2 0
我想连接两个 DataFrame,但每个 ID 只有一行,所以它看起来像这样:
ID col1 col2 field1_1 field2_1 field1_2 field2_2 field1_3 field2_3
0 1 2 10 4 1 3 3 2 0
1 3 1 21 5 4 9 5
我已经尝试合并和旋转数据 df.pivot(index=df1.index, columns='ID')
但是因为长度是可变的,所以我变成了一个ValueError。
ValueError: all arrays must be same length
在不过度格式化的情况下,我们希望合并并添加一个计算 'ID'
的多索引级别。
df = df1.merge(df2)
cc = df.groupby('ID').cumcount()
df.set_index(['ID', 'col1', 'col2', cc]).unstack()
field1 field2
0 1 2 0 1 2
ID col1 col2
1 2 10 4.0 3.0 2.0 1.0 3.0 0.0
3 1 21 5.0 9.0 NaN 4.0 5.0 NaN
我们可以确定格式:
df = df1.merge(df2)
cc = df.groupby('ID').cumcount() + 1
d1 = df.set_index(['ID', 'col1', 'col2', cc]).unstack().sort_index(axis=1, level=1)
d1.columns = d1.columns.to_series().map('{0[0]}_{0[1]}'.format)
d1.reset_index()
ID col1 col2 field1_1 field2_1 field1_2 field2_2 field1_3 field2_3
0 1 2 10 4.0 1.0 3.0 3.0 2.0 0.0
1 3 1 21 5.0 4.0 9.0 5.0 NaN NaN
我有两个DataFrame
df1 具有以下形式
ID col1 col2
0 1 2 10
1 3 1 21
df2 看起来像这样
ID field1 field2
0 1 4 1
1 1 3 3
2 3 5 4
3 3 9 5
4 1 2 0
我想连接两个 DataFrame,但每个 ID 只有一行,所以它看起来像这样:
ID col1 col2 field1_1 field2_1 field1_2 field2_2 field1_3 field2_3
0 1 2 10 4 1 3 3 2 0
1 3 1 21 5 4 9 5
我已经尝试合并和旋转数据 df.pivot(index=df1.index, columns='ID')
但是因为长度是可变的,所以我变成了一个ValueError。
ValueError: all arrays must be same length
在不过度格式化的情况下,我们希望合并并添加一个计算 'ID'
的多索引级别。
df = df1.merge(df2)
cc = df.groupby('ID').cumcount()
df.set_index(['ID', 'col1', 'col2', cc]).unstack()
field1 field2
0 1 2 0 1 2
ID col1 col2
1 2 10 4.0 3.0 2.0 1.0 3.0 0.0
3 1 21 5.0 9.0 NaN 4.0 5.0 NaN
我们可以确定格式:
df = df1.merge(df2)
cc = df.groupby('ID').cumcount() + 1
d1 = df.set_index(['ID', 'col1', 'col2', cc]).unstack().sort_index(axis=1, level=1)
d1.columns = d1.columns.to_series().map('{0[0]}_{0[1]}'.format)
d1.reset_index()
ID col1 col2 field1_1 field2_1 field1_2 field2_2 field1_3 field2_3
0 1 2 10 4.0 1.0 3.0 3.0 2.0 0.0
1 3 1 21 5.0 4.0 9.0 5.0 NaN NaN