我必须以这样的方式跨越两个熊猫表:
表1
+-----+-----+
| id |label|
+-----+-----+
| 1 | 2 |
| 2 | 0 |
| 3 | 1 |
+-----+-----+
表2:
+-----+-----+
| id |label|
+-----+-----+
| 1 | 1 |
| 2 | 1 |
| 3 | 0 |
+-----+-----+
目标:
表3:跨表格的总和标签
+-----+---+---+---+
| |1 |2 |3 |
+-----+---+---+---+
| 1 | 3 | 3 | 2 |
| 2 | 1 | 1 | 0 |
| 3 | 2 | 2 | 1 |
+-----+---+---+---+
代码:
d = {'col1': [1, 2, 3], 'col2': [2, 0, 1]}
df1 = pd.DataFrame(data=d)
d = {'col1': [1, 2, 3], 'col2': [1, 1, 0]}
df2 = pd.DataFrame(data=d)
答案 0 :(得分:1)
您可以通过广播添加两个向量来实现此目的 -
v = df1.label[:, None] + df2.label.values
或者,使用np.add.outer
自动为您添加广告 -
v = np.add.outer(df1.label, df2.label)
最后,将结果转换为DataFrame
-
pd.DataFrame(v, index=df1.id, columns=df2.id)
id 1 2 3
id
1 3 3 2
2 1 1 0
3 2 2 1
对于第二个标题,构建一个MultiIndex
-
idx = pd.MultiIndex.from_product([['header'], df2.id])
pd.DataFrame(v, index=df1.id, columns=idx)
header
1 2 3
id
1 3 3 2
2 1 1 0
3 2 2 1