Использование функции и условия для заполнения одного столбца данных в другом столбце данных - PullRequest
0 голосов
/ 15 апреля 2020

У меня есть два кадра данных, как показано ниже, df1 и df2 имеет много столбцов, уменьшил их для лучшей читаемости

        df1                   df2 
   id   A    B    C        ID   A        
    1   x    y    z         1   m1      
    2   x1   y1   z1        2   m2     
    3   x2   y2   z2

Требуется заполнить столбец A в df2 с помощью функции, где df1.id == df2 .ID, позволяет этой функции быть function1

input function1(x,y,z)     output    return m1. 
input function1(x1,y1,z1)  output    return m2. 

в основном я должен использовать функцию1, чтобы заполнить столбец A в df2 и где df1.id == df2.ID, в функции, которую я должен отправить значения из 3 столбцов df1

Я пытался, как показано ниже

df2['A'] = df1.loc[df1['id'] == df2['ID'],function1(df1['A'],df1['B'],df1['C'])]

, но он не работает, очевидно, функция не предназначена для столбцов в качестве ввода, какие-либо предложения?

Ответы [ 2 ]

0 голосов
/ 15 апреля 2020

Итак, я решил, я создал новый столбец в df1

df1["NewCol"] = df1.apply(lambda x: function1(df1['A'],df1['B'],df1['C']))

, а затем реализовал в df2

df2['A'] = df1.loc[df1['id'] == df2['ID'], "NewCol"]
0 голосов
/ 15 апреля 2020

Я делаю все возможное, основываясь на моем понимании вашей проблемы:

df1=pd.DataFrame({'id': {0: 1, 1: 2, 2: 3},
 'A': {0: 'x', 1: 'x1', 2: 'x2'},
 'B': {0: 'y', 1: 'y1', 2: 'y2'},
 'C': {0: 'z', 1: 'z1', 2: 'z2'}})

df2=pd.DataFrame({'ID':[1,2]})

def my_func(a,b,c):#in your case, function1
    if all('1' in i for i in (a,b,c)):
        return 'm2'
    else:
        return 'm1'

df2['A']=df1[df1['id'].isin(df2['ID'])]\#find where the id columns match
.apply(lambda x: my_func(*x[1:]), axis=1)#apply the function on the A,B,C columns of df1

df2

    ID  A
0   1   m1
1   2   m2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...