重新采样,一列删除重复项,然后将所有列取回

时间:2019-03-11 03:19:20

标签: python python-3.x python-requests

我有一个包含5列的表格:日期,时间,事件,电子邮件组织ID。我想删除重复的行,它们具有相同的日期,相同的时间(时间可以与同一日期的另一个时间相匹配,最多匹配+或-30秒)和相同的事件。我已经重新采样了数据并删除了event。的重复项,请参见下面的代码。我现在想将电子邮件地址和组织ID重新添加回结果数据中。这意味着我想找到组织ID,事件ID和电子邮件地址的唯一组合,并基于此重新采样数据。我只为比赛做

您可以看到事件'iti'在2:29:40和2:29:50彼此重复30秒。所以我只保留了这两个值中的一个。  现在,我想将电子邮件地址和组织ID行添加回结果数据中。我只想要那些与相应事件匹配的行

样品输入和输出的图片如下

The sample input and output

到目前为止的代码

df=pd.read_csv('data.csv')

  Date          Time       Event    email   organization id
  12/15/2018    6:55:41     abc      kp     1035
  12/15/2018    13:36:39    def      pk     1036
  12/15/2018    14.21:56    com      lr     1040
  12/16/2018    2:29:30     pil      rm     1041
  12/16/2018    20:22:20    ati      as     1042
  12/17/2018    2:29:40     iti      ap     1040
  12/17/2018    2:29:30     esz      pg     1041
  12/17/2018    2:29:50     iti      ap     1040
  12/17/2018    9:04:03     ono      ar     1041
  12/17/2018    9:35:04     fac      sdh    1042
df1 = pd.DataFrame([' '.join([x,y]) for x, y in 
   zip(df['Date'],df['Time'])])
df1.columns = ['DateTime']
df1['DateTime'] = pd.to_datetime(df1['DateTime'])

df = df.join(df1)
df.set_index('DateTime', inplace=True)
outdf = df.resample('30S')['Event'].unique().to_frame()
outdf.columns = ['Events']
outdf = outdf.loc[outdf['Events'].apply(lambda x: len(x) > 0)]
df1=outdf['Events'].apply(pd.Series).stack().reset_index(level=1, drop=True).to_frame('Events')
df1['Date'] = df1.index.date
df1['Time'] = df1.index.time
df1
                   Events   Date    Time
DateTime            
2018-12-15 06:55:30 abc  2018-12-15 06:55:30
2018-12-15 13:36:30 def  2018-12-15 13:36:30
2018-12-15 14:56:00 com  2018-12-15 14:56:00
2018-12-16 02:29:30 pil  2018-12-16 02:29:30
2018-12-16 20:22:00 ati  2018-12-16 20:22:00
2018-12-17 02:29:30 esz  2018-12-17 02:29:30
2018-12-17 02:29:30 iti  2018-12-17 02:29:30
2018-12-17 09:04:00 ono  2018-12-17 09:04:00
2018-12-17 09:35:00 fac  2018-12-17 09:35:00

在此最终输出中,我想添加电子邮件和组织ID。

0 个答案:

没有答案