比较和替换列项 pandas 数据框

Comparing and replacing column items pandas dataframe

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

如果我的数据框是

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']

示例数据:

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)

输出:

   a  b  c
0  1  5  0
1  2  4  0
2  0  3  0
3  4  2  0
4  5  1  0

是你想要的吗?

使用map by Series created by 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