这些是我的数据框:
df1 = pd.DataFrame({'sym': ['msft', 'msft', 'amd', 'amd'], 'close': [102, 100, 35, 30]})
df2 = pd.DataFrame({'sym': ['msft', 'amd'], 'close': [103, 36]})
我想结合df1
和df2
的方式是为sym
中的每一组df1
添加第一行。这是一个简化的数据框,我原来有数千行。
这是我想要的结果:
sym close
0 msft 103
1 msft 102
2 msft 100
3 amd 36
4 amd 35
5 amd 30
答案 0 :(得分:3)
您可以使用pd.Categorical()
来执行此操作,该操作可让您设置分类列的顺序。
m=df2.append(df1,ignore_index=True)
m=m.assign(sym=pd.Categorical(m.sym,df1.sym.unique(),ordered=True)).sort_values('sym')
sym close
0 msft 103
2 msft 102
3 msft 100
1 amd 36
4 amd 35
5 amd 30
答案 1 :(得分:3)
我们可以将pd.concat
降序使用sort_values
:
df = pd.concat([df1, df2]).sort_values(['sym', 'close'],
ascending=False).reset_index(drop=True)
sym close
0 msft 103
1 msft 102
2 msft 100
3 amd 36
4 amd 35
5 amd 30
基于anky_91的评论
df1 = pd.DataFrame({'sym': ['msft', 'msft', 'amd', 'amd','cmd'], 'close': [102, 100, 35, 30,40]})
df2 = pd.DataFrame({'sym': ['msft', 'cmd','amd'], 'close': [103, 23,36]})
sym close
0 msft 102
1 msft 100
2 amd 35
3 amd 30
4 cmd 40
sym close
0 msft 103
1 cmd 23
2 amd 36
df = pd.concat([df1, df2]).sort_values(['sym', 'close'],
ascending=False).reset_index(drop=True)
sym close
0 msft 103
1 msft 102
2 msft 100
3 cmd 40
4 cmd 23
5 amd 36
6 amd 35
7 amd 30
答案 2 :(得分:2)
首先连接两个数据框
按两列的降序排列
df3 = pd.concat([df1,df2],sort=False)
df3.sort_values(['close', 'sym'], ascending=False,inplace=True)
答案 3 :(得分:1)
这应该有效:
$.wait(a()).done(
function(){
console.log("function a() and b() done");
}
);
输出:
import pandas as pd
df1 = pd.DataFrame({'sym': ['msft', 'msft', 'amd', 'amd'], 'close': [102, 100, 35, 30]})
df2 = pd.DataFrame({'sym': ['msft', 'amd'], 'close': [103, 36]})
df3 = df1.append(df2)
df3 = df3.sort_values(['close', 'sym'], ascending=False)