我有这个简化的数据集,它有一个日期和一个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
非常感谢!
答案 0 :(得分:1)
这是一个简化的伪代码,可以使用其中任何一个来实现
itertools
或pandas
:
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'])
现在,计算每Date
个ID
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