Python 按日期筛选CSV
熊猫按日期过滤 如何过滤带有日期的CSV 示例CSVPython 按日期筛选CSV,python,python-3.x,csv,pandas,Python,Python 3.x,Csv,Pandas,熊猫按日期过滤 如何过滤带有日期的CSV 示例CSV User Dates Hours shift User1 01.01.2012 5 aaa User1 02.01.2012 5 aaa User1 03.01.2012 2 bbb User1 04.01.2012 3 aaa ..... User1 12.03.2012 1 aaa User1 13.03.2012
User Dates Hours shift
User1 01.01.2012 5 aaa
User1 02.01.2012 5 aaa
User1 03.01.2012 2 bbb
User1 04.01.2012 3 aaa
.....
User1 12.03.2012 1 aaa
User1 13.03.2012 8 ccc
.....
User2 04.02.2012 4 aaa
User2 05.02.2012 3 bbb
结束等等
我可以使用
use = users.loc["User1"]
use['Date'] = pd.to_datetime(use['Date'], infer_datetime_format=True, exact=True)
mask = (use['Datum'] > Start) & (use['Date'] <= End)
print(use.loc[mask])
我还可以计算所有的小时数
print(use["Hours"].sum()
我可以数他的班次
counts = use.loc[ou['Shift'] == 'aaa', 'Hours'].value_counts()
但我不知道如何根据日期和上面的陈述进行筛选。
比如,用户2统计3月份的所有班次,或者用户1统计2月份的所有工时
或多或少,我设法按日期和用户使用
use = users.loc["User1"]
use['Date'] = pd.to_datetime(use['Date'], infer_datetime_format=True, exact=True)
mask = (use['Datum'] > Start) & (use['Date'] <= End)
print(use.loc[mask])
更新:
我取得了一些进展
print(use[use['Date'] > '02.01.2012'],['hours'].sum()))
很好,但不是我想要的。与:
print(use[use['Date'] > '02.01.2012'] & (use[use['Date'] < '02.05.2012'],['hours'].sum()))
我认为你可以使用:
Start = '2012-01-01'
End = '2012-03-03'
use['Dates'] = pd.to_datetime(use['Dates'], dayfirst=True)
mask = (use['Dates'] > Start) & (use['Dates'] <= End) & (use['shift'] == 'aaa')
use1 = use.loc[mask]
print (use1)
User Dates Hours shift
1 User1 2012-01-02 5 aaa
3 User1 2012-01-04 3 aaa
6 User2 2012-02-04 4 aaa
use1 = use.query('Dates > @Start and Dates <= @End and shift == "aaa"')
print (use1)
User Dates Hours shift
1 User1 2012-01-02 5 aaa
3 User1 2012-01-04 3 aaa
6 User2 2012-02-04 4 aaa
print (mask.sum())
3
编辑: 总而言之:
use = pd.DataFrame({'Date': ['01.01.2012', '02.01.2012', '03.01.2012', '04.01.2012', '12.03.2012', '13.03.2012', '04.02.2012', '05.02.2012'], 'User': ['User1', 'User1', 'User1', 'User1', 'User1', 'User1', 'User2', 'User2'], 'hours': [5, 5, 2, 3, 1, 8, 4, 3], 'shift': ['aaa', 'aaa', 'bbb', 'aaa', 'aaa', 'ccc', 'aaa', 'bbb']})
print (use)
User Date hours shift
0 User1 01.01.2012 5 aaa
1 User1 02.01.2012 5 aaa
2 User1 03.01.2012 2 bbb
3 User1 04.01.2012 3 aaa
4 User1 12.03.2012 1 aaa
5 User1 13.03.2012 8 ccc
6 User2 04.02.2012 4 aaa
7 User2 05.02.2012 3 bbb
Start='2012-01-01'
完=‘2012-01-30’
用户='User1'
移位='aaa'
使用['Date']=pd.to_datetime(使用['Date'],dayfirst=True)
#按日期计算的小时数(总和)
打印(使用.loc[(使用['Date']>Start)和(使用['Date']开始)和(使用['Date']<结束)和
(使用['User']==User),'hours'].sum()
10
#按日期和用户列出的小时数(计数)
打印((使用['Date']>开始)和(使用['Date']<结束)和
(使用['User']==User)).sum()
3.
#按日期、用户和班次计算的小时数(计数)
打印((使用['Date']>开始)和(使用['Date']<结束)和
(使用['User']==User)和(使用['shift']==shift)).sum()
2.
在运行聚合之前,您需要缩小数据集的范围
use[use['Dates'] == '01.01.2012']['hours'].sum()
该行的第一部分是筛选:
use[use['Dates'] == '01.01.2012']
我如何在这些范围内计算,例如所有班次?掩码=(使用['Date']>Start)和(使用['Date']我更新答案,你能检查一下吗?你想要的输出是什么?我想你可以先按日期过滤,然后输出聚合-。这是你想要的吗?很高兴可以帮助你,祝你好运!熊猫真的是一个很好的库。没问题,我们每个人都开始了。但以后会越来越好。祝你好运!但我需要一个日期范围,例如从2012年1月1日开始至2012年1月6日相同钻孔。
使用[使用['Dates']>='2012年1月1日][使用['Dates']不工作值错误:无法从重复轴重新编制索引
use = pd.DataFrame({'Date': ['01.01.2012', '02.01.2012', '03.01.2012', '04.01.2012', '12.03.2012', '13.03.2012', '04.02.2012', '05.02.2012'], 'User': ['User1', 'User1', 'User1', 'User1', 'User1', 'User1', 'User2', 'User2'], 'hours': [5, 5, 2, 3, 1, 8, 4, 3], 'shift': ['aaa', 'aaa', 'bbb', 'aaa', 'aaa', 'ccc', 'aaa', 'bbb']})
print (use)
User Date hours shift
0 User1 01.01.2012 5 aaa
1 User1 02.01.2012 5 aaa
2 User1 03.01.2012 2 bbb
3 User1 04.01.2012 3 aaa
4 User1 12.03.2012 1 aaa
5 User1 13.03.2012 8 ccc
6 User2 04.02.2012 4 aaa
7 User2 05.02.2012 3 bbb
Start = '2012-01-01'
End = '2012-01-30'
User = 'User1'
shift = 'aaa'
use['Date'] = pd.to_datetime(use['Date'], dayfirst=True)
#how many Hours by dates (sum)
print(use.loc[(use['Date'] > Start) & (use['Date'] < End),'hours'].sum())
10
#how many Hours by dates and user (sum)
print(use.loc[(use['Date'] > Start) & (use['Date'] < End) &
(use['User'] == User),'hours'].sum())
10
#how many Hours by dates and user (count)
print(((use['Date'] > Start) & (use['Date'] < End) &
(use['User'] == User)).sum())
3
#how many Hours by dates and user and shift (count)
print(((use['Date'] > Start) & (use['Date'] < End) &
(use['User'] == User ) & (use['shift'] == shift)).sum())
2
use[use['Dates'] == '01.01.2012']['hours'].sum()
use[use['Dates'] == '01.01.2012']