我需要根据故障计数的进展减去日期。
下表包含两个输入列Date
和Fault_Count
。我需要的输出列是Option1
和Option2
。最后两列显示日期差计算。基本上,当故障计数改变时,我需要计算从故障计数改变到故障计数初始开始的天数。例如,故障计数在1/4/2020
上更改为2,我需要获取Fault_Count
从0
开始并更改为2的天数(即1/4/2020
-1/1/2020
=3
)
Date Fault_Count Option1 Option2 Option1calc Option2calc
1/1/2020 0 0 0
1/2/2020 0 0 0
1/3/2020 0 0 0
1/4/2020 2 3 3 1/4/2020-1/1/2020 1/4/2020-1/1/2020
1/5/2020 2 0 0
1/6/2020 2 0 0
1/7/2020 4 3 3 1/7/2020-1/4/2020 1/7/2020-1/4/2020
1/8/2020 4 0 0
1/9/2020 5 2 2 1/9/2020-1/7/2020 1/9/2020-1/7/2020
1/10/2020 5 0 0
1/11/2020 0 2 -2 1/11/2020-1/9/2020 (1/11/2020-1/9/2020)*-1 as the fault resets
1/12/2020 1 1 1 1/12/2020-1/11/2020 1/12/2020-1/11/2020
下面是代码
import pandas as pd
d = {'Date': ['1/1/2020', '1/2/2020', '1/3/2020', '1/4/2020', '1/5/2020', '1/6/2020', '1/7/2020', '1/8/2020', '1/9/2020', '1/10/2020', '1/11/2020', '1/12/2020'], 'Fault_Count' : [0, 0, 0, 2, 2, 2, 4, 4, 5, 5, 0, 1]}
df = pd.DataFrame(d)
df['Date'] = pd.to_datetime(df['Date'])
df['Fault_count_diff'] = df.Fault_Count.diff().fillna(0)
df['Cumlative_Sum'] = df.Fault_count_diff.cumsum()
我想我可以用累计和和分组来得到组,得到组的第一个值的差值。这是我所能得到的,而且我注意到使用累积和并没有给我有序的组,因为一些Fault_Count
得到重置
Date Fault_Count Fault_count_diff Cumlative_Sum
0 2020-01-01 0 0.0 0.0
1 2020-01-02 0 0.0 0.0
2 2020-01-03 0 0.0 0.0
3 2020-01-04 2 2.0 2.0
4 2020-01-05 2 0.0 2.0
5 2020-01-06 2 0.0 2.0
6 2020-01-07 4 2.0 4.0
7 2020-01-08 4 0.0 4.0
8 2020-01-09 5 1.0 5.0
9 2020-01-10 5 0.0 5.0
10 2020-01-11 0 -5.0 0.0
11 2020-01-12 1 1.0 1.0
所需输出:
Date Fault_Count Option1 Option2
0 2020-01-01 0 0.0 0.0
1 2020-01-02 0 0.0 0.0
2 2020-01-03 0 0.0 0.0
3 2020-01-04 2 3.0 3.0
4 2020-01-05 2 0.0 0.0
5 2020-01-06 2 0.0 0.0
6 2020-01-07 4 3.0 3.0
7 2020-01-08 4 0.0 0.0
8 2020-01-09 5 2.0 2.0
9 2020-01-10 5 0.0 0.0
10 2020-01-11 0 2.0 -2.0
11 2020-01-12 1 1.0 1.0
谢谢你的帮助
使用:
详细信息:
使用^{} +^{} 创建布尔掩码} +^{} 和^{} 创建布尔掩码
m1
,当Fault_count
更改时表示边界条件,类似地,使用^{m2
,表示Fault_count
重置的条件:对使用} ,并使用^{} 转换
m1.cumsum
获得的连续故障计数使用^{Date
列:使用^{} 减去使用^{} 移位的} 基于掩码
s
的Date
,使用^{m2
填充0
,并将其分配给Option1
。类似地,我们根据掩码m2
从Option1
获得Option2
:代替
df['Fault_count_diff'] = ...
和下一行,执行以下操作:然后获取每次计数更改之间的日期
选择1。如果df中存在所有日历日期:
选择2。如果有可能某个日期未显示在
df
中,并且您仍然希望获取事件之间的日历日:相关问题 更多 >
编程相关推荐