繁体   English   中英

pandas merge 和 merge_ordered 不保留行顺序?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM