df = pd.DataFrame({'ID': [1, 2, 3], 'ETD': ['06.02.2021', '05.01.2021', '07.02.2021'], 'ETA':['06.02.2021', '05.01.2021', '07.02.2021']},
columns=['ID', 'ETD', 'ETA'])
ID ETD ETA
0 1 06.02.2021 06.02.2021
1 2 05.01.2021 05.01.2021
2 3 07.02.2021 07.02.2021
df2 = pd.DataFrame({'ID': [1, 2, 3], 'ETD': ['07.02.2021', '05.01.2021', '07.02.2021'], 'ETA':['06.02.2021', '05.01.2021', '04.02.2021']},
columns=['ID', 'ETD', 'ETA'])
ID ETD ETA
0 1 07.02.2021 06.02.2021
1 2 05.01.2021 05.01.2021
2 3 07.02.2021 04.02.2021
这两个Dfs具有相同的列,但它们可以具有不同的长度。根据ID键,我想比较ETA和ETD日期,如果有差异,必须复制行
以其他方式传递到新数据帧
所需DF:
df_CNG = pd.DataFrame({'ID': [1, 3], 'ETA-last': ['06.02.2021', '07.02.2021'],'ETD-last': [' 06.02.2021', '07.02.2021'],'ETD-new': ['07.02.2021', '07.02.2021'], 'ETA-new':['06.02.2021', '04.02.2021']},
columns=['ID', 'ETA-last', 'ETD-new', 'ETA-last', 'ETA-new'])
ID ETA-last ETD-new ETA-last ETA-new
0 1 06.02.2021 07.02.2021 06.02.2021 06.02.2021
1 3 07.02.2021 07.02.2021 07.02.2021 04.02.2021
作为一个解决方案,我试着一行一行地做一个while循环,比较日期并将单元格复制到df_CNG,但这很慢,而且jupyter笔记本上的页面变得没有响应,加载时间太长。有更好的办法吗
e = 0
Rows_e = len(df2)
while True:
print(e)
if e == Rows_e:
break
else:
l = 0
Rows_l = len(df)
while True:
print(l)
if l == (Rows_l+1):
break
else:
if (df2.loc[e,'ID'] == df.loc[l,'ID']):
if df2.loc[e,'ETD'] == df.loc[l,'ETD'] and df2.loc[e,'ETA'] == df.loc[l,'ETA']:
e+=1
break
elif df2.loc[e,'ETD'] != df.loc[l,'ETD'] or df2.loc[e,'ETA'] != df.loc[l,'ETA']:
df_CNG.loc[e,'ETD-new'] = df2.loc[e,'ETD']
df_CNG.loc[e,'ETD-last'] = df.loc[l,'ETD']
df_CNG.loc[e,'ETA-new'] = df2.loc[e,'ETA']
df_CNG.loc[e,'ETA-last'] = df.loc[l,'ETA']
df_CNG.loc[e,'ID'] = df2.loc[e,'ID']
e+=1
break
else:
e+=1
break
else:
l+=1
尝试合并ID上的两个df,然后将ID作为索引:
然后:
out
的输出:相关问题 更多 >
编程相关推荐