比较和替换列项目pandas数据框

时间:2018-10-25 09:41:23

标签: pandas lambda where apply string-comparison

我在熊猫数据框中有三列C1,C2,C3。我的目标是在C3_i = C1_j时用C2_j替换C1_i。这些都是字符串。我在哪里尝试但是失败了。避免for循环的一种好方法是什么?

如果我的数据框是

df=pd.DataFrame({'c1': ['a', 'b', 'c'], 'c2': ['d','e','f'], 'c3': ['c', 'z', 'b']})

然后我希望将c3替换为['f','z','e']

我尝试过,这需要很长时间。

for i in range(0,len(df)):
    for j in range(0,len(df)):
        if (df.iloc[i]['c1']==df.iloc[j]['c3']):
            df.iloc[j]['c3']=accounts.iloc[i]['c2']

2 个答案:

答案 0 :(得分:0)

示例数据:

table_2(x, y, z)

输出:

dataframe = pd.DataFrame({'a':['10','4','3','40','5'], 'b':['5','4','3','2','1'], 'c':['s','d','f','g','h']})

代码:

    a  b  c
0  10  5  s
1   4  4  d
2   3  3  f
3  40  2  g
4   5  1  h

输出:

def replace(df):
    if len(dataframe[dataframe.b==df.a]) != 0:
        df['a'] = dataframe[dataframe.b==df.a].c.values[0] 
    return df

dataframe = dataframe.apply(replace, 1)

是您想要的吗?

答案 1 :(得分:0)

map创建的Series使用set_index

df['c3'] = df['c3'].map(df.set_index('c1')['c2']).fillna(df['c3'])

使用update的替代解决方案:

df['c3'].update(df['c3'].map(df.set_index('c1')['c2']))

print (df)
  c1 c2 c3
0  a  d  f
1  b  e  z
2  c  f  e