我有两个分别名为df
和df2
的数据框。对于列id
,df
和df2
包含相同种类的元素,但是元素的顺序不同。现在,我想合并df
和df2
,并保持id
的列df
的顺序不变。
import pandas as pd
import numpy as np
df=pd.DataFrame({'id':['b','c','a','f','e','d']})
df2=pd.DataFrame(np.arange(240).reshape((6,40)),columns=[n for n in range(40)])
df2=pd.concat([df2,pd.DataFrame({'id':['a','b','c','d','e','f']})],axis=1)
Input:
df
id
0 b
1 c
2 a
3 f
4 e
5 d
df2
0 1 2 3 4 5 6 7 8 9 ... 31 32 33 34 \
0 0 1 2 3 4 5 6 7 8 9 ... 31 32 33 34
1 40 41 42 43 44 45 46 47 48 49 ... 71 72 73 74
2 80 81 82 83 84 85 86 87 88 89 ... 111 112 113 114
3 120 121 122 123 124 125 126 127 128 129 ... 151 152 153 154
4 160 161 162 163 164 165 166 167 168 169 ... 191 192 193 194
5 200 201 202 203 204 205 206 207 208 209 ... 231 232 233 234
35 36 37 38 39 id
0 35 36 37 38 39 a
1 75 76 77 78 79 b
2 115 116 117 118 119 c
3 155 156 157 158 159 d
4 195 196 197 198 199 e
5 235 236 237 238 239 f
Expected:
id 0 1 2 3 4 5 6 7 8 ... 30 31 32 33 \
0 b 40 41 42 43 44 45 46 47 48 ... 70 71 72 73
1 c 80 81 82 83 84 85 86 87 88 ... 110 111 112 113
2 a 0 1 2 3 4 5 6 7 8 ... 30 31 32 33
3 f 200 201 202 203 204 205 206 207 208 ... 230 231 232 233
4 e 160 161 162 163 164 165 166 167 168 ... 190 191 192 193
5 d 120 121 122 123 124 125 126 127 128 ... 150 151 152 153
34 35 36 37 38 39
0 74 75 76 77 78 79
1 114 115 116 117 118 119
2 34 35 36 37 38 39
3 234 235 236 237 238 239
4 194 195 196 197 198 199
5 154 155 156 157 158 159
My solution:
for col in df2.columns.tolist()[:-1]:
s = df2.set_index('id')[col]
val = df['id'].map(s).rename(col)
dfs.append(val)
temp = pd.concat(dfs, axis=1)
df=pd.concat([df,temp],axis=1)
但是,我的解决方案不好,并且代码运行缓慢,这是我无法忍受的。也许有更好的方法来解决它。
答案 0 :(得分:1)
onClick(v){
playerIcon = 10;
ChangeHeadDialog.dismiss();
applyPlayerIconToPlayer(Integer playerIcon)
}
与merge
how='left'