cuốn sách gpt4 ai đã làm

python - Concat DataFrames 对角线

In lại Tác giả: Walker 123 更新时间:2023-11-28 20:58:59 30 4
mua khóa gpt4 Nike

这是一个 self 回答的问题。给定两个数据框,

x
0 1
0 1 2
1 3 4

y
0 1 2
0 5 6 7
1 8 9 X
2 Y Z 0

x 和 y 的对角线连接由下式给出:

     0 1 3 4 5
0 1.0 2.0 NaN NaN NaN
1 3.0 4.0 NaN NaN NaN
2 NaN NaN 5 6 7
3 NaN NaN 8 9 X
4 NaN NaN Y Z 0

最简单最简单的方法是什么?我想考虑两种情况:

  1. 连接两个数据帧
  2. 连接未指定数量的数据帧(数据帧列表)

câu trả lời hay nhất

首先,简单的情况。假设 header 和索引都是单调数字,您可以将 y 的索引修改为 x 的偏移量:

y.index += x.index[-1] + 1
y.columns += x.columns[-1] + 1

pd.concat([x, y])

0 1 2 3 4
0 1.0 2.0 NaN NaN NaN
1 3.0 4.0 NaN NaN NaN
2 NaN NaN 5 6 7
3 NaN NaN 8 9 X
4 NaN NaN Y Z 0

现在,为了将其推广到多个 DataFrame,我们迭代一个循环:

df_list = [x, y]

offset_x = offset_y = 0
for df in df_list:
df.index = np.arange(len(df)) + offset_x
df.columns = np.arange(len(df.columns)) + offset_y

offset_x += df.index[-1] + 1
offset_y += df.columns[-1] + 1

pd.concat(df_list)

0 1 2 3 4
0 1.0 2.0 NaN NaN NaN
1 3.0 4.0 NaN NaN NaN
2 NaN NaN 5 6 7
3 NaN NaN 8 9 X
4 NaN NaN Y Z 0

如果您的索引/列不是单调递增,我强烈建议在连接之前重置它们,或者查看下面的选项。


如果您接受 0 而不是 NaN,则可以使用 scipy của block_diag,而无需修改索引或列:

from scipy.linalg import block_diag
pd.DataFrame(block_diag(*df_list))

0 1 2 3 4
0 1 2 0 0 0
1 3 4 0 0 0
2 0 0 5 6 7
3 0 0 8 9 X
4 0 0 Y Z 0

归功于 this answer对于这个解决方案。

关于python - Concat DataFrames 对角线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50659623/

30 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress