回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我试图为每个<code>date</code>字段计算一个和,但是我只想计算当前和下一个<code>date</code>中的ID的和,因此对ID进行<code>rolling</code>比较,然后计算<code>groupby</code>和。目前,我必须循环数据帧,这是非常缓慢的</p>
<p>例如,我的df:</p>
<pre><code>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]
})
</code></pre>
<p>理想情况下,我希望按<code>Date</code>对数据帧进行分组,并且只对两个日期之间常见的<code>IDs</code>求和,例如下面的例子。然而,这是非常缓慢的</p>
<pre><code>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
</code></pre>
<p>有没有一种方法可以在<code>pandas</code>中执行此操作而不在数据帧上循环</p>