提问人:bktllr 提问时间:6/19/2023 更新时间:6/19/2023 访问量:53
将两个 Pandas 行合并为一个,并具有时间序列的重复列
Combine two Pandas rows into one with duplicated columns for time series
问:
我有以下问题正在尝试解决。我有两个具有相同列的 Pandas Dataframe 行:
A列 | B列 |
---|---|
单元格 1 | 单元格 2 |
单元格 3 | 单元格 4 |
我想通过附加列将两行合并为一行:
专栏 A_1 | 专栏 B_1 | 专栏 A_2 | 专栏 B_2 |
---|---|---|---|
单元格 1 | 单元格 2 | 单元格 3 | 单元格 4 |
此操作用于创建窗口大小为 2 的时序行,用于训练机器学习模型。因此,我正在做数百万次这个操作,这应该需要很小的运营成本。
提前致谢!
我尝试使用 pandas concat,但它太慢了,需要很多内存
答:
2赞
Andrej Kesely
6/19/2023
#1
我希望我理解正确,但您可以尝试:
x = df.stack().reset_index()
x[''] = x['level_1'] + '_' + (x['level_0'] + 1).astype(str)
x = x[['', 0]].set_index('').T
print(x)
指纹:
Column A_1 Column B_1 Column A_2 Column B_2
0 Cell 1 Cell 2 Cell 3 Cell 4
3赞
Corralien
6/19/2023
#2
你可以使用 stack():
out = df.stack().droplevel(0).to_frame().T
out.columns += '_' + out.groupby(level=0, axis=1).cumcount().add(1).astype(str)
print(out)
# Output
Column A_1 Column B_1 Column A_2 Column B_2
0 Cell 1 Cell 2 Cell 3 Cell 4
如果您有多行,则可以使用:numpy.reshape
>>> pd.DataFrame(df.values.reshape(-1, 4)).add_prefix('Col_')
Col_0 Col_1 Col_2 Col_3
0 Cell 1 Cell 2 Cell 3 Cell 4
1 Cell 1 Cell 2 Cell 3 Cell 4
1赞
MaryRa
6/19/2023
#3
也许它有帮助:
result = df.stack()
result.index = [f"{y}_{x+1}" for x,y in result.index]
result = pd.DataFrame(result).T
0赞
PaulS
6/19/2023
#4
另一种可能的解决方案:
(pd.DataFrame(np.hstack(df.values.T)).T
.set_axis([f'{x}_{y+1}' for y in range(2) for x in df.columns], axis=1))
或者
from itertools import chain
(pd.DataFrame(chain(*[df[col] for col in df.columns])).T
.set_axis([f'{x}_{y}' for y in range(1,3) for x in df.columns], axis=1))
输出:
Column A_1 Column B_1 Column A_2 Column B_2
0 Cell 1 Cell 3 Cell 2 Cell 4
评论
pd.concat