我有一个看起来像这样的数据框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
我想确定df2中不存在的df1中的新行,将它们附加到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()
有没有简单的方法可以实现这一目标?
答案 0 :(得分:0)
您可以使用内置的datetime功能的熊猫在合并之前将创建日期字段添加到df1。
df1['date_created'] = pd.Timestamp.now()
#to keep just the date part
df1['date_created'] = df1['date_created'].dt.date
答案 1 :(得分:0)
使用左联接合并两个框架并将指示器设置为True:
df_merged=pd.merge(df1,df2,how='left',indicator=True)
仅过滤掉左侧框架中包含的行
df_merged=df_merged.loc[df_merged['_merge']=='left_only']
df_merged ['Created'] = pd.Timestamp.now()