У меня есть два кадра данных DF1 и DF2, каков наилучший способ добавить строки, которые соответствуют условию от DF2 до DF1 по определенным индексам? - PullRequest
1 голос
/ 23 октября 2019

Я пытаюсь добавить строку из dataframe2 в dataframe1 в конце каждой группы в dataframe1, но только те строки из dataframe2, которые соответствуют значению столбца в dataframe 1 (в данном случае: это совпадает с 'Name').

Если у меня есть dataframe1, заданный как:

data = {
    'Name':['Jill', 'Jill', 'Jill', 'Jill', 'Ryan',
            'Ryan','Lilian', 'Jack', 'Jack', 'Jack'],
    'Age': [15, 20, 25, 30, 23, 23, 45, 24, 65, 115]
}

df1 = pd.DataFrame(data)

df1

data2 = {
        'Name':['Jack', 'Ryan',
            'Lilian', 'Jill'],
        'Gender': ['m', 'm', 'f', 'f']
}

df2 = pd.DataFrame(data2)

df2

Я надеюсь увидеть:

  Name   Age Gender
0 Jill   15  
1 Jill   20
2 Jill   25
3 Jill   30
4 Jill       f
5 Ryan   23
6 Ryan   23  
7 Ryan       m
8 Lilian 45
9 Lilian     f
10 Jack  24
11 Jack  65
12 Jack  115 
13 Jack      m

Я нашел исходные индексы для последнего появления групповых группи положить их в список.

с использованием df1.index.values.tolist()

Затем подумывал о попытке установить какой-то цикл, который проверяет совпадения имен перед добавлением в index+1.

1 Ответ

1 голос
/ 23 октября 2019

Это должно работать

compare = df1.Name.unique()
df3 = df2[df2['Name'].isin(compare)]
df4 = df1.append(df3)
df5 = df4.sort_values(['Name','Age'])
df5 = df5.reset_index(drop=True)
print(df5)

Вывод:

      Age Gender    Name
0    24.0    NaN    Jack
1    65.0    NaN    Jack
2   115.0    NaN    Jack
3     NaN      m    Jack
4    15.0    NaN    Jill
5    20.0    NaN    Jill
6    25.0    NaN    Jill
7    30.0    NaN    Jill
8     NaN      f    Jill
9    45.0    NaN  Lilian
10    NaN      f  Lilian
11   23.0    NaN    Ryan
12   23.0    NaN    Ryan
13    NaN      m    Ryan
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...