我有一个如下所示的 dataframe1:
A B C D
1 111 a 9
2 121 b 8
3 122 c 7
4 121 d 6
5 131 e 5
另外,我还有另一个 dataframe2:
Code String
111 s
12 b
13 u
我想要的是创建一个如下所示的数据框:
A B C D
1 111 S 9
2 121 b 8
3 122 c 7
4 121 b 6
5 131 u 5
也就是说,取前 n 位数字(其中 n 是 dataframe2 的 Code 列中的位数),如果它与代码具有相同的数字,则 dataframe1 中的 C 列将针对 dataframe2 中的字符串进行更改.
最佳答案
这是你想要的吗?代码不是很简洁,但是可以工作..
import pandas as pd
DICT=df2.set_index('Code').T.to_dict('list')
Temp=[]
for key, value in DICT.items():
n=len(str(key))
D1={str(key):value[0]}
T=df1.B.astype(str).apply(lambda x: x[:n]).map(D1)
Temp2=(df1.B.astype(str).apply(lambda x: x[:n]))
Tempdf=pd.DataFrame({'Ori':df1.B,'Now':Temp2,'C':df1.C})
TorF=(Tempdf.groupby(['Now'])['Ori'].transform(min) == Tempdf['Ori'])
for n, i in enumerate(T):
if TorF[n]==False:
T[n]=Tempdf.ix[n,0]
Temp.append(T)
df1.C=pd.DataFrame(data=Temp).fillna(method='bfill').T.ix[:,0]
Out[255]:
A B C D
0 1 111 s 9
1 2 121 b 8
2 3 122 c 7
3 4 121 b 6
4 5 131 u 5
关于python - 使用不同的数据框更改列值 - Python Pandas,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44770278/