我有两个pandas数据帧,我想将每个第二个数据帧行与每个第一个数据帧行组合如下:
首先:
val1 val2
1 2
0 0
2 1
第二
l1 l2
a a
b c
结果(预期结果大小= len(第一个)* len(第二个)):
val1 val2 l1 l2
1 2 a a
1 2 b c
0 0 a a
0 0 b c
2 1 a a
2 1 b b
他们没有相同的索引。
此致 Secau
答案 0 :(得分:6)
创建代理键以在它们之间进行笛卡尔连接...
import pandas as pd
df1 = pd.DataFrame({'A': [1, 0, 2],
'B': [2, 0, 1],
'tmp': 1})
df2 = pd.DataFrame({'l1': ['a', 'b'],
'l2': ['a', 'c'],
'tmp': 1})
print pd.merge(df1, df2, on='tmp', how='outer')
结果:
A B tmp l1 l2
0 1 2 1 a a
1 1 2 1 b c
2 0 0 1 a a
3 0 0 1 b c
4 2 1 1 a a
5 2 1 1 b c
答案 1 :(得分:0)
这是另一种解决方案:
import pandas as pd
df1 = pd.DataFrame({'val1': [1,0,2], 'val2': [2,0,1])
df2 = pd.DataFrame({'l1': ['a', 'b'], 'l2': ['a', 'c'])
df_list = []
for x in df1.index:
series = df1.iloc[x, :]
series_list = [series for _ in range(len(df2.index))]
temp_df = pd.DataFrame(series_list, index=range(len(df2.index)))
df_list.append(pd.concat((temp_df, df2), axis=1, join='inner'))
final_df = pd.concat(df_list)
产生:
final_df
val1 val2 l1 l2
0 1 2 a a
1 1 2 b c
0 0 0 a a
1 0 0 b c
0 2 1 a a
1 2 1 b c