Python NaN_2处的累积和重置
我有一个数据帧,我已经通过连接包含各种信息位的多个数据帧来制作。然后,我在dataframe中创建新的列,并使用对数据列的操作结果。 其中一列['MSD']在促成连接的每个数据帧之间的连接处包含一个NaN 我希望创建一个新列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 相反,它们产生与输入相同或 我
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