使用不同的数据帧来更改列值 - Python Pandas

时间:2017-06-26 23:46:33

标签: python pandas

我有一个如下所示的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中的字符串

1 个答案:

答案 0 :(得分:1)

这是你想要的吗?代码不是很整洁,但工作..

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