Сравнение и замена элементов столбца pandas dataframe - PullRequest
0 голосов
/ 25 октября 2018

У меня есть три столбца C1, C2, C3 в панде.Моя цель - заменить C1_i на C2_j всякий раз, когда C3_i = C1_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']

Ответы [ 2 ]

0 голосов
/ 25 октября 2018

Использование 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
0 голосов
/ 25 октября 2018

Пример данных:

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

Эточто ты хочешь?

...