Python NaN_2处的累积和重置

Python NaN_2处的累积和重置,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个数据帧,我已经通过连接包含各种信息位的多个数据帧来制作。然后,我在dataframe中创建新的列,并使用对数据列的操作结果。 其中一列['MSD']在促成连接的每个数据帧之间的连接处包含一个NaN 我希望创建一个新列MSD_cum,其中每个值都是MSD 但我希望从每个月开始重新计算累计金额 关于这一点,已经有一个问题了,但是尽管给出的答案中的代码执行时没有错误,但它们都没有实现我想要的 即 将产生输出 MSD_cum 1 3 6 10 NaN 1 3 6 相反,它们产生与输入相同或 我

我有一个数据帧,我已经通过连接包含各种信息位的多个数据帧来制作。然后,我在dataframe中创建新的列,并使用对数据列的操作结果。 其中一列['MSD']在促成连接的每个数据帧之间的连接处包含一个NaN

我希望创建一个新列
MSD_cum
,其中每个值都是
MSD
但我希望从每个月开始重新计算累计金额

关于这一点,已经有一个问题了,但是尽管给出的答案中的代码执行时没有错误,但它们都没有实现我想要的 即

将产生输出

MSD_cum
1
3
6
10
NaN
1
3
6
相反,它们产生与输入相同或
我自己的初始尝试也失败了,并产生了与输入相同的输出,尝试使用if语句使cumsum以数据索引之间的差异为条件

if  np.diff(data_230['time']) is 1:
data_230['MSD_cum']  = cumsum(data_230['MSD'])
else:
    data_230['MSD_cum'] = data_230['MSD']
在这一点上,我很乐意使用任何方法。

使用创建分组系列
s
,这将需要对列
MSD
进行分组,以便我们可以计算
cumsum
,它在
MSD
中每次出现
NaN
时都会重置,下一步用于将
s
上的
MSD
列与
cumsum
一起分组:

s = df['MSD'].isna().cumsum()
df['MSD_cum'] = df['MSD'].groupby(s).cumsum()
详细信息:

# print(s)   
0    0
1    0
2    0
3    0
4    1
5    1
6    1
7    1
Name: MSD, dtype: int64

# print(df)
   MSD  MSD_cum
0  1.0      1.0
1  2.0      3.0
2  3.0      6.0
3  4.0     10.0
4  NaN      NaN
5  1.0      1.0
6  2.0      3.0
7  3.0      6.0
# print(s)   
0    0
1    0
2    0
3    0
4    1
5    1
6    1
7    1
Name: MSD, dtype: int64

# print(df)
   MSD  MSD_cum
0  1.0      1.0
1  2.0      3.0
2  3.0      6.0
3  4.0     10.0
4  NaN      NaN
5  1.0      1.0
6  2.0      3.0
7  3.0      6.0