[英]pandas merge and merge_ordered does not preserve row order?
考虑这个代码片段:
import pandas as pd
cols = ['x1', 'x2']
df = pd.DataFrame([
['s1', 'a', 'a', 12],
['s2', 'a', 'b', 7],
['s3', 'b', 'a', 14],
['s4', 'b', 'b', 8],
['s5', 'a', 'a', 19],
['s6', 'a', 'b', 16],
['s7', 'b', 'a', 14],
['s8', 'b', 'b', 10]
], columns=['s', 'x1', 'x2', 'y'])
y_ = df.groupby(cols).mean()
y_.rename(columns={'y': 'y_'}, inplace=True)
print(df, y_)
print(pd.merge(df, y_, on=cols))
打印的数据帧是:
东风:
s x1 x2 y
0 s1 a a 12
1 s2 a b 7
2 s3 b a 14
3 s4 b b 8
4 s5 a a 19
5 s6 a b 16
6 s7 b a 14
7 s8 b b 10
y_:
x1 x2 y_
a a 15.5
b 11.5
b a 14.0
b 9.0
合并:
s x1 x2 y y_
0 s1 a a 12 15.5
1 s5 a a 19 15.5
2 s2 a b 7 11.5
3 s6 a b 16 11.5
4 s3 b a 14 14.0
5 s7 b a 14 14.0
6 s4 b b 8 9.0
7 s8 b b 10 9.0
可以看到,合并后的数据框对行进行了重新排序,而s
列并没有保留原来的顺序。
合并两个数据框时如何保留行的顺序? 更具体地说,我希望这个输出:
s x1 x2 y y_
0 s1 a a 12 15.5
1 s2 a b 7 11.5
2 s3 b a 14 14.0
3 s4 b b 8 9.0
4 s5 a a 19 15.5
5 s6 a b 16 11.5
6 s7 b a 14 14.0
7 s8 b b 10 9.0
在原始df
上使用左合并,应该是这样的:
output = df.merge(y_, how='left', on=cols)
输出:
s x1 x2 y y_
0 s1 a a 12 15.5
1 s2 a b 7 11.5
2 s3 b a 14 14.0
3 s4 b b 8 9.0
4 s5 a a 19 15.5
5 s6 a b 16 11.5
6 s7 b a 14 14.0
7 s8 b b 10 9.0
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.