作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有两个 DataFrame,分别名为 df
和 df2
。对于 id
列,df
和 df2
包含相同类型的元素,但元素的顺序不同。现在我想合并 df
和 df2
并保持 df
列 id
的顺序不变。
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)
输入:
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
预期:
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
我的解决方案:
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)
但是,我的解决方案并不好,代码运行缓慢,这是我无法忍受的。也许有更好的方法来解决这个问题。
最佳答案
合并
与how='left'
df.merge(df2, 'left')
id 0 1 2 3 4 5 6 7 8 ... 30 31 32 33 34 35 36 37 38 39
0 b 40 41 42 43 44 45 46 47 48 ... 70 71 72 73 74 75 76 77 78 79
1 c 80 81 82 83 84 85 86 87 88 ... 110 111 112 113 114 115 116 117 118 119
2 a 0 1 2 3 4 5 6 7 8 ... 30 31 32 33 34 35 36 37 38 39
3 f 200 201 202 203 204 205 206 207 208 ... 230 231 232 233 234 235 236 237 238 239
4 e 160 161 162 163 164 165 166 167 168 ... 190 191 192 193 194 195 196 197 198 199
5 d 120 121 122 123 124 125 126 127 128 ... 150 151 152 153 154 155 156 157 158 159
关于python - 如何重置多列的索引以匹配两个数据帧?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52490739/
我是一名优秀的程序员,十分优秀!