gpt4 book ai didi

python - 如何重置多列的索引以匹配两个数据帧?

转载 作者:行者123 更新时间:2023-12-01 09:00:30 25 4
gpt4 key购买 nike

我有两个 DataFrame,分别名为 dfdf2。对于 id 列,dfdf2 包含相同类型的元素,但元素的顺序不同。现在我想合并 dfdf2 并保持 dfid 的顺序不变。

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com