Обновлять столбец каждый раз, когда в фрейм данных добавляется новая строка - PullRequest
0 голосов
/ 22 мая 2019

У меня есть фрейм данных df1, который выглядит следующим образом:

    use_id  user_id platform    platform_version    device
0   22782   26980   ios         10.2                iPhone7
1   22783   29628   android     6.0                 Nexus 5
2   22784   28473   android     5.1                 SM-G903F
3   22785   15200   ios         10.2                iPhone7
4   22786   28239   android     6.0                 ONE E1003
5   22787   12921   android     4.3                 GT-I9505
6   22788   28714   android     6.0                 SM-G930F
7   22789   28714   android     6.0                 SM-G930F
8   22790   29592   android     5.1                 D2303
9   22791   28775   ios         10.2                iPhone6

и второй фрейм данных df2 (подмножество df1):

    use_id  user_id   device       date_created
0   22782   26980     iPhone7      2018/12/12
1   22783   29628     Nexus 5      2019/01/15
2   22784   28473     SM-G903F     2019/01/23
3   22785   15200     iPhone7      2019/01/23
4   22786   28239     ONE E1003    2019/01/23

Я хочу определить новые строки вdf1 отсутствует в df2, добавьте их в df2, а затем обновите столбец date_created, указав дату ввода.

Таким образом, df2 будет похож на это:

    use_id  user_id   device       date_created
0   22782   26980     iPhone7      2018/12/12
1   22783   29628     Nexus 5      2019/01/15
2   22784   28473     SM-G903F     2019/01/23
3   22785   15200     iPhone7      2019/01/23
4   22786   28239     ONE E1003    2019/01/23   
5   22787   12921     GT-I9505     2019/05/22
6   22788   28714     SM-G930F     2019/05/22
7   22789   28714     SM-G930F     2019/05/22
8   22790   29592     D2303        2019/05/22
9   22791   28775     iPhone6      2019/05/22

Я смогполучить разницу между двумя кадрами данных с помощью merge ():

mergedStuff = pd.merge(df1['use_id', 'user_id', 'device'], df2, on=['use_id', 'user_id', 'device'], how='outer', indicator=True).loc[mergedStuff['_merge'] == 'left_only']

и затем добавить новые строки в df2:

df2 = df2.append(mergedStuff, ignore_index=True)

Но я пытаюсь добавить дату создания, как показано нижетолько для новых добавленных строк.

df2['date_created'] = pd.datetime.now()

Есть ли простой способ добиться этого?

Ответы [ 2 ]

0 голосов
/ 22 мая 2019

Используйте объединение влево, чтобы объединить два кадра и установить для индикатора значение True:

df_merged=pd.merge(df1,df2,how='left',indicator=True)

Отфильтровать строки, содержащиеся только в левом фрейме

df_merged=df_merged.loc[df_merged['_merge']=='left_only']

df_merged [ 'Создано'] = pd.Timestamp.now ()

0 голосов
/ 22 мая 2019

Вы можете использовать встроенные в datetime функции панд, чтобы добавить поле даты создания в df1 до слияния.

df1['date_created'] = pd.Timestamp.now()
#to keep just the date part
df1['date_created'] = df1['date_created'].dt.date
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...