使用熊猫添加数据中的问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用熊猫添加数据中的问题相关的知识,希望对你有一定的参考价值。
问题:-我想构建一个逻辑,该逻辑接收诸如考勤数据,及时,员工ID之类的数据,并返回一个包含员工ID,时间,出勤日期以及员工基本上在哪个时段输入的数据框。 (假设In time是日期14-10-2019的9:30:00,因此,如果雇员在9:30到来,则在该日期和该列中插入一个值1。)
下面给出示例
我花了很多时间来为这个问题建立逻辑,但未能建立。
“ >>
我有一个看起来像这样的数据集。
我想要这样的输出,以便无论在什么时间(雇员输入的时间),它都只将数据插入到该时间列中,而仅是列中。
这是我的代码,但仅是重复的最后一个循环。
temp =[] for date in nf['DaiGong']: for en in nf['EnNo']: for i in nf['DateTime']: col=['EnNo','Date','InTime','9:30-10:30','10:30-11:00','11:00-11:30','11:30-12:30','12:30-13:00','13:00-13:30'] ndf=pd.DataFrame(columns=col) if i < '10:30:00' and i > '09:30:00': temp.append(1) ndf['9:30-10:30'] = temp ndf['InTime'] = i ndf['Date'] = date ndf['EnNo'] = en elif i < '11:00:00' and i > '10:30:00': temp.append(1) ndf['10:30-11:00'] = temp ndf['InTime'] = i ndf['Date'] = date ndf['EnNo'] = en elif i < '11:30:00' and i > '11:00:00': temp.append(1) ndf['11:00-11:30'] = temp ndf['InTime'] = i ndf['Date'] = date ndf['EnNo'] = en elif i < '12:30:00' and i > '11:30:00': temp.append(1) ndf['11:30-12:30'] = temp ndf['InTime'] = i ndf['Date'] = date ndf['EnNo'] = en elif i < '13:00:00' and i > '12:30:00': temp.append(1) ndf['12:30-13:00'] = temp ndf['InTime'] = i ndf['Date'] = date ndf['EnNo'] = en elif i < '13:30:00' and i > '13:00:00': temp.append(1) ndf['13:00-13:30'] = temp ndf['InTime'] = i ndf['Date'] = date ndf['EnNo'] = en
这是我的代码的输出。
问题:-我想构建一个逻辑,以获取诸如考勤数据,时间,员工ID之类的数据,并返回一个包含员工ID,时间,出勤日期以及基本上在哪个位置的员工的数据框...
答案
IIUC,
df = pd.DataFrame({'EnNo':[2,2,2,2,2,3,3,3,3],
'DaiGong':['2019-10-12', '2019-10-13', '2019-10-14', '2019-10-15', '2019-10-16', '2019-10-12', '2019-10-13', '2019-10-14', '2019-10-15'],
'DateTime':['09:53:56', '10:53:56', '09:23:56', '11:53:56', '11:23:56', '10:33:56', '12:53:56', '12:23:56', '09:53:56']})
df
DaiGong DateTime EnNo
0 2019-10-12 09:53:56 2
1 2019-10-13 10:53:56 2
2 2019-10-14 09:23:56 2
3 2019-10-15 11:53:56 2
4 2019-10-16 11:23:56 2
5 2019-10-12 10:33:56 3
6 2019-10-13 12:53:56 3
7 2019-10-14 12:23:56 3
8 2019-10-15 09:53:56 3
import datetime
df['DateTime'] = pd.to_datetime(df['DateTime']).dt.time #converting to datetime
def time_range(row): # I only wrote two conditions - add more
i = row['DateTime']
if i < datetime.time(10, 30, 0) and i > datetime.time(9, 30, 0):
return '9:30-10:30'
elif i < datetime.time(11, 0, 0) and i > datetime.time(10, 30, 0):
return '10:30-11:00'
else:
return 'greater than 11:00'
df['time range'] = df.apply(time_range, axis=1)
df1 = pd.concat([df[['EnNo', 'DaiGong', 'DateTime']], pd.get_dummies(df['time range'])], axis=1)
df1
EnNo DaiGong DateTime 10:30-11:00 9:30-10:30 greater than 11:00
0 2 2019-10-12 09:53:56 0 1 0
1 2 2019-10-13 10:53:56 1 0 0
2 2 2019-10-14 09:23:56 0 0 1
3 2 2019-10-15 11:53:56 0 0 1
4 2 2019-10-16 11:23:56 0 0 1
5 3 2019-10-12 10:33:56 1 0 0
6 3 2019-10-13 12:53:56 0 0 1
7 3 2019-10-14 12:23:56 0 0 1
8 3 2019-10-15 09:53:56 0 1 0
To get sum of count by employee,
df1.groupby(['EnNo'], as_index=False).sum()
另一答案
我的测试数据:
以上是关于使用熊猫添加数据中的问题的主要内容,如果未能解决你的问题,请参考以下文章