我试图为每个date
字段计算一个和,但是我只想计算当前和下一个date
中的ID的和,因此对ID进行rolling
比较,然后计算groupby
和。目前,我必须循环数据帧,这是非常缓慢的
例如,我的df:
df = pd.DataFrame({
'Date': [1, 1, 1, 1, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4],
'ID': [ 1, 2, 3, 4 , 2, 3, 4 , 2, 3, 4, 5, 1, 2, 3, 4],
'Value': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
})
理想情况下,我希望按Date
对数据帧进行分组,并且只对两个日期之间常见的IDs
求和,例如下面的例子。然而,这是非常缓慢的
tmpL = df.groupby('Date')['ID'].apply(list)
tmpV = df.groupby('Date')['Value'].sum()
for i in range(1, tmpL.shape[0]):
res = list(set(tmpL.iloc[i]) - set(tmpL.iloc[i - 1]))
v = df.loc[ df.ID.isin(res) & (df.Date == tmpL.index[i]), 'Value'].sum()
tmpV.iloc[i] = tmpV.iloc[i] - v
tmpV
Date
1 10
2 18
3 27
4 42
Name: Value, dtype: int64
有没有一种方法可以在pandas
中执行此操作而不在数据帧上循环
将^{} 与聚合} 进行比较,最后与} :
sum
一起使用,与^{sum
一起传递给^{第一个解决方案,我认为斯洛威尔:
通过将原始数据转换为} 、^{} 并通过^{} 、最后一次聚合
set
s,然后使用^{sum
获得原始数据的所有匹配值,然后减去:尝试:
输出:
相关问题 更多 >
编程相关推荐