数据框的填充列

Padding columns of dataframe

我有 2 个这样的数据框,

df1

    0   1   2   3   4   5   category
0   1   2   3   4   5   6   foo
1   4   5   6   5   6   7   bar
2   7   8   9   5   6   7   foo1

df2

    0   1   2   category
0   1   2   3   bar
1   4   5   6   foo

df1 的形状是 (3,7),df2 的形状是 (2,4)

我想将 df2 重塑为 (2,7)(根据第一个数据框 df1 列)保持最后一列相同。

df2 

    0   1   2  3  4  5  category
0   1   2   3  0  0  0  bar
1   4   5   6  0  0  0  foo
  1. 您可以使用 .shape[0] 从每个数据框中获取行数。和 .shape[1] 从每个数据框中获取列数。
  2. 在逻辑上将这些与 insert 一起使用以仅包含所需的行并生成所需的列 0:

s1, s2 = (df1.shape[1]), (df2.shape[1])
s = s1-s2
[df2.insert(s-1, s-1, 0) for s in range(s2,s1)]

    0   1   2   3   4   5   category
0   1   2   3   0   0   0   bar
1   4   5   6   0   0   0   foo

另一种使用iloc的方法:

s1, s2 = (df1.shape[1] - 1), (df2.shape[1] - 1)
df3 = pd.concat([df2.iloc[:, :-1],
                 df1.iloc[:df2.shape[0]:, s2:s1],
                 df2.iloc[:, -1]], axis=1)
df3.iloc[:, s2:s1] = 0

    0   1   2   3   4   5   category
0   1   2   3   0   0   0   bar
1   4   5   6   0   0   0   foo

如果你想确保具有较少列的数据框将根据具有更多列的数据框用 zero 填充列,那么你可以尝试 DataFrame.align on axis=1align 两个数据帧的列保持行不变:

df1, df2 = df1.align(df2, axis=1, fill_value=0)

print(df2)

    0  1  2  3  4  5 category
 0  1  2  3  0  0  0      bar
 1  4  5  6  0  0  0      foo