Pandas 与当前行的一列匹配的先前记录的时间序列累积和
Pandas time series cumsum of previous records matching a column of current row
我正在尝试添加一个列,该列表示与给定列的行的当前值匹配的先前记录的累计总和,让我们举个例子。
我的数据是:
|t |label|qty|cumsum|
|2020-01-05|A |10 |10 |
|2020-01-06|B |5 |5 |
|2020-01-06|C |2 |2 |
|2020-01-07|A |-5 |5 |
|2020-01-07|A |2 |7 |
|2020-01-08|B |-30|-25 |
|2020-01-09|C |5 |7 |
cumsum
列将总结为“对标签与当前行相同的所有过去记录求和”
理想情况下,为了代码清晰,我想要一个表达式,例如 df['cumsum']=df.loc[(df['label']==current label) & (df['t'] <= current index)].cumsum()
,它不会明确地通过循环 for ix,row in df:
中的每个先前的列
另一方面是累加和是从头开始做的,dataframe可能是20条记录或者500k条记录。
此外,为了清楚起见,我在示例中只放置了 3 个标签,但我的数据集中可以有几十个标签
我发现了其他一些类似的问题,但它们并不完全符合我的需要:
Python Pandas: Cumulative Sum based on multiple conditions => 它'just'统计过去某个条件为真的次数,而不是特定列的累计和
Pandas temporal cumulative sum by group => 不为数据帧的每一行保持记录“实时”
欢迎任何形式的帮助!
谢谢!
df.groupby('label')['qty'].transform('cumsum')
我正在尝试添加一个列,该列表示与给定列的行的当前值匹配的先前记录的累计总和,让我们举个例子。
我的数据是:
|t |label|qty|cumsum|
|2020-01-05|A |10 |10 |
|2020-01-06|B |5 |5 |
|2020-01-06|C |2 |2 |
|2020-01-07|A |-5 |5 |
|2020-01-07|A |2 |7 |
|2020-01-08|B |-30|-25 |
|2020-01-09|C |5 |7 |
cumsum
列将总结为“对标签与当前行相同的所有过去记录求和”
理想情况下,为了代码清晰,我想要一个表达式,例如 df['cumsum']=df.loc[(df['label']==current label) & (df['t'] <= current index)].cumsum()
,它不会明确地通过循环 for ix,row in df:
另一方面是累加和是从头开始做的,dataframe可能是20条记录或者500k条记录。
此外,为了清楚起见,我在示例中只放置了 3 个标签,但我的数据集中可以有几十个标签
我发现了其他一些类似的问题,但它们并不完全符合我的需要:
Python Pandas: Cumulative Sum based on multiple conditions => 它'just'统计过去某个条件为真的次数,而不是特定列的累计和
Pandas temporal cumulative sum by group => 不为数据帧的每一行保持记录“实时”
欢迎任何形式的帮助! 谢谢!
df.groupby('label')['qty'].transform('cumsum')