数据框的填充列
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
- 您可以使用
.shape[0]
从每个数据框中获取行数。和 .shape[1]
从每个数据框中获取列数。
- 在逻辑上将这些与
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=1
到 align
两个数据帧的列保持行不变:
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
我有 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
- 您可以使用
.shape[0]
从每个数据框中获取行数。和.shape[1]
从每个数据框中获取列数。 - 在逻辑上将这些与
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=1
到 align
两个数据帧的列保持行不变:
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