我有如下所示的移动维修数据。
根据ID和日期排序。
ID Status Date Cost
0 1 F 2017-06-22 500
1 1 M 2017-07-22 100
7 1 F 2018-06-22 600
9 1 M 2018-08-22 150
10 1 F 2019-03-22 750
2 2 M 2017-06-29 200
5 2 F 2017-09-29 600
6 2 F 2018-01-29 500
16 2 M 2018-03-29 100
17 2 M 2018-04-29 100
18 2 F 2018-12-29 500
3 3 M 2017-03-20 300
8 3 F 2018-06-20 700
11 3 M 2018-10-20 250
4 4 M 2017-08-10 800
12 4 F 2018-06-10 100
13 4 F 2018-10-10 500
14 4 M 2019-01-10 200
15 4 F 2019-06-10 600
F-失败
M-维护
Q1)我的目的是找出M(维护)对增加F(故障)持续时间的影响。
即。故障时间如何随着它们之间的维护而变化。
df['D'] = df.groupby('ID')['Date'].diff().dt.days
首先,我尝试使用连续的F-F模式将上述数据帧子集化,如下所示
F-F模式(连续F-F-ID明智)
ID Status Date Cost
5 2 F 2017-09-29 600
6 2 F 2018-01-29 500
12 4 F 2018-06-10 100
13 4 F 2018-10-10 500
请帮助我获得熊猫代码,以获取以上子集。
同样,我想对M-F,F-M和M-M模式进行子集化并分析持续时间。为了解决这个问题,请提出您的想法,而不是子集化。
期望的F-M子集
ID Status Date Cost
0 1 F 2017-06-22 500
1 1 M 2017-07-22 100
7 1 F 2018-06-22 600
9 1 M 2018-08-22 150
6 2 F 2018-01-29 500
16 2 M 2018-03-29 100
8 3 F 2018-06-20 700
11 3 M 2018-10-20 250
13 4 F 2018-10-10 500
14 4 M 2019-01-10 200
答案 0 :(得分:1)
使用:
#convert to datetimes and sorting
df['Date'] = pd.to_datetime(df['Date'])
df = df.sort_values(['ID', 'Date', 'Status'])
#differenc column
df['D'] = df.groupby('ID')['Date'].diff().dt.days
#create statust column with next and previous values per groups
df['S1'] = df.groupby('ID')['Status'].shift() + '-'+ df['Status']
df['S2'] = df['Status'] + '-'+ df.groupby('ID')['Status'].shift(-1)
#filter by boolean indexing
pat = 'F-F'
df1 = df[df['S1'].eq(pat) | df['S2'].eq(pat)]
print (df1)
ID Status Date Cost D S1 S2
5 2 F 2017-09-29 600 92.0 M-F F-F
6 2 F 2018-01-29 500 122.0 F-F M-F
12 4 F 2018-06-10 100 304.0 M-F F-F
13 4 F 2018-10-10 500 122.0 F-F M-F
pat = 'F-M'
df1 = df[(df['S1'].eq(pat) | df['S2'].eq(pat))]
print (df1)
ID Status Date Cost D S1 S2
0 1 F 2017-06-22 500 NaN NaN F-M
1 1 M 2017-07-22 100 30.0 F-M M-F
7 1 F 2018-06-22 600 335.0 M-F F-M
9 1 M 2018-08-22 150 61.0 F-M M-F
6 2 F 2018-01-29 500 122.0 F-F F-M
16 2 M 2018-03-29 100 59.0 F-M M-M
8 3 F 2018-06-20 700 457.0 M-F F-M
11 3 M 2018-10-20 250 122.0 F-M NaN
13 4 F 2018-10-10 500 122.0 F-F F-M
14 4 M 2019-01-10 200 92.0 F-M M-F