循环遍历具有相同列标题的两个数据帧,以根据多个条件查找相似的行

2024-04-24 07:31:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我在看比较交通在不同的十字路口一年比一年。一个文件包含2017年10月至12月的信息,另一个文件包含2018年1月至10月的信息。我想比较2017年10月和2018年10月的数据点。唯一的问题是这些文件的条目不完全相同。目前,datetime的格式为2018-10-30 18:15:00,因此我需要找到与之完全相同的匹配项,除了年份的第四位(2017年与2018年),它们还需要匹配相应的交叉点名称值。希望,我留下的东西能在一个数据帧中提供所有2017和2018行,每个数据帧有两个条目(一个来自2017和2018,用于相同的交叉点)

我试过很多方法,包括“合并”技术,其中“on”列位于“intersection”和“date”上,但这只会创建比我需要的更多的列,最终并不能解决问题。我把两个CSV分开了,所以它们只包括10月份,并尝试在“day”和“intersection\u name”上匹配,但这也不起作用

import pandas as pd
import re
import csv
import datetime

#read files in
df1 = pd.read_csv('detailed-traffic-pedestrian-volumes-2017.csv') 
df2 = pd.read_csv('detailed-traffic-pedestrian-volumes-2018.csv')
df1['datetime_bin'] = pd.to_datetime(df1['datetime_bin'])
df2['datetime_bin'] = pd.to_datetime(df2['datetime_bin'])

df1.rename(columns={'sum': 'volume'}, inplace=True)

df1['year'] = pd.DatetimeIndex(df1['datetime_bin']).year
df1['month'] = pd.DatetimeIndex(df1['datetime_bin']).month
df1['day'] = pd.DatetimeIndex(df1['datetime_bin']).day


df2['year'] = pd.DatetimeIndex(df2['datetime_bin']).year
df2['month'] = pd.DatetimeIndex(df2['datetime_bin']).month
df2['day'] = pd.DatetimeIndex(df2['datetime_bin']).day

df1 = df1.loc[(df1['month'] == 10) & (df1['classification'] == 
'Bicycles')]
df2 = df2.loc[(df2['month'] == 10) & (df2['classification'] == 
'Bicycles')] # days are listed as YYYY-MM-DD

common = df1.merge(df2,how = 'inner', on= 
['intersection_name','day'])
print(common.head())

我正在寻找的东西,输出所有的行在10月为这两年,以便我有一些比较它。i、 e.相同时间,不同年份和相同交叉值除外。上面的代码留给我过多的列,我相信还有其他问题。加分能够调整的日子,使我比较一个星期五与星期五,而不是仅仅10月10日至10月10日。我的尝试肯定有问题。理想情况下,我希望将完整的datetime作为索引,而不必将其分解为几天来查找匹配项


Tags: 文件csv数据importreaddatetimebinyear