使用相同的键计算过去的条目

时间:2018-06-17 21:55:43

标签: python python-3.x

我有这个简化的数据集,它有一个日期和一个ID。我希望有一个新的列总数和ID的数量,但由于我创建了ML模型预测,我只想在实际事件之前考虑这些条目。

我想计算每个条目只有日期较小的条目。类似于:计算ID相同且日期< =当前行的日期的所有条目,并添加具有该值的列。

ID | Date   | 
1  | 3/4/10 |
1  | 3/6/10 |
1  | 1/2/10 |
2  | 5/5/10 |
2  | 5/6/10 |

结果

ID | Date   | Total
1  | 3/4/10 | 1
1  | 3/6/10 | 2
1  | 1/2/10 | 0
2  | 5/5/10 | 0
2  | 5/6/10 | 1

非常感谢!

3 个答案:

答案 0 :(得分:1)

这是一个简化的伪代码,可以使用其中任何一个来实现 itertoolspandas

  • ID
  • 对数据集进行分组
  • 每组:
    • 排序Date
    • Total列是日期的序号。

答案 1 :(得分:1)

定义用于检查日期的函数。 例如使用。

def DateOrderChecker(input):
truncatedInput = input[:n]
trunflip = truncatedInput.reverse()
trunFinal = (trunflip[:v]).reverse()

其中n是char。在日期结束时,v在之前。所以你会留下“5/5/10”

现在做

month, day, year = trunFinal.split("/")

最后制作一个if字符串进行比较(年/月/日)< (HeldMonth / HeldDay / Heldyear)

排名重要年份>月份>天

答案 2 :(得分:0)

假设您正在使用Pandas,请先将Date列更改为datetime,然后按ID排序Date

df = pd.DataFrame({'ID':[1,1,1,2,2], 'Date':['3/4/10','3/6/10','1/2/10','5/5/10','5/6/10']})
df['Date'] = pd.to_datetime(df['Date'])
df = df.sort_values(['ID','Date'])

现在,计算每DateID d的数量,使用np.arange制作滚动计数器并转换为pd.Series。堆叠结果并瞧瞧:

df['Total'] = (df
                .groupby('ID')
                .count()['Date']
                .apply(np.arange)
                .apply(pd.Series)
                .stack()  
                .values)  


print(df.sort_index())
        Date  ID  Total
0 2010-03-04   1    1.0
1 2010-03-06   1    2.0
2 2010-01-02   1    0.0
3 2010-05-05   2    0.0
4 2010-05-06   2    1.0