我在pandas中有一个包含多列的数据框。我想将每一行与下一行合并。 例如:
输入数据框:
A B C
a1 a2 a3
b1 b2 b3
c1 c1 c3
d1 d2 d3
输出数据帧:
A1 B1 C1 A2 B2 C2
a1 a2 a3 b1 b2 b3
b1 b2 b3 c1 c2 c3
c1 c2 c3 d1 d2 d3
d1 d2 d3 NaN NaN NaN
我提出的解决方案是复制原始数据帧,将索引更改为索引 - 1,然后按索引合并两个数据帧。 还有其他解决方案吗?
答案 0 :(得分:2)
将shift
与join
,concat
或assign
一起使用,以便新列名add_suffix
非常有用:
df1 = df.add_suffix('1').join(df.shift(-1).add_suffix('2'))
df1 = pd.concat([df.add_suffix('1'), df.shift(-1).add_suffix('2')], axis=1)
df1 = df.add_suffix('1').assign(**df.shift(-1).add_suffix('2'))
print (df1)
A1 B1 C1 A2 B2 C2
0 a1 a2 a3 b1 b2 b3
1 b1 b2 b3 c1 c1 c3
2 c1 c1 c3 d1 d2 d3
3 d1 d2 d3 NaN NaN NaN
答案 1 :(得分:1)
您可以使用
In [204]: pd.concat([df.add_suffix(1), df[1:].reset_index(drop=True).add_suffix(2)],
axis=1)
Out[204]:
A1 B1 C1 A2 B2 C2
0 a1 a2 a3 b1 b2 b3
1 b1 b2 b3 c1 c1 c3
2 c1 c1 c3 d1 d2 d3
3 d1 d2 d3 NaN NaN NaN
并且,将其扩展为通用用途
In [206]: N = 3 # Say 3 more times
In [207]: pd.concat([df.add_suffix(1)] +
[df[x+1:].reset_index(drop=True).add_suffix(x+2)
for x in range(N)], axis=1)
Out[207]:
A1 B1 C1 A2 B2 C2 A3 B3 C3 A4 B4 C4
0 a1 a2 a3 b1 b2 b3 c1 c1 c3 d1 d2 d3
1 b1 b2 b3 c1 c1 c3 d1 d2 d3 NaN NaN NaN
2 c1 c1 c3 d1 d2 d3 NaN NaN NaN NaN NaN NaN
3 d1 d2 d3 NaN NaN NaN NaN NaN NaN NaN NaN NaN