我有一个如下所示的数据框,我试图根据ID的“状态”列和“日期”列的模式过滤数据。
我的代码:
import pandas as pd
import numpy as np
sales = [{'ID': '1', 'Status': 'F', 'Date': '2017-04-26'},
{'ID': '2', 'Status': 'F', 'Date': '2017-05-06'},
{'ID': '1', 'Status': 'M', 'Date': '2017-05-16'},
{'ID': '1', 'Status': 'F', 'Date': '2017-07-06'},
{'ID': '2', 'Status': 'F', 'Date': '2017-09-06'},
{'ID': '1', 'Status': 'F', 'Date': '2018-01-14'},
{'ID': '3', 'Status': 'M', 'Date': '2017-07-16'},
{'ID': '4', 'Status': 'F', 'Date': '2017-07-16'},
{'ID': '2', 'Status': 'M', 'Date': '2018-07-06'},
{'ID': '3', 'Status': 'F', 'Date': '2018-01-06'},
{'ID': '3', 'Status': 'M', 'Date': '2018-07-06'},
{'ID': '3', 'Status': 'F', 'Date': '2019-07-06'},
{'ID': '2', 'Status': 'M', 'Date': '2019-05-06'},
{'ID': '2', 'Status': 'F', 'Date': '2019-10-06'},
{'ID': '4', 'Status': 'M', 'Date': '2019-11-06'}]
df = pd.DataFrame(sales)
df['Date'] = pd.to_datetime(df['Date'])
df = df.sort_values(['ID', 'Date', 'Status'])
我尝试了以下代码。
df_status = df.groupby('ID')['Status'].apply(list)
dict_st= df_status.to_frame().to_dict().get('Status')
根据ID对DF排序后,在数据框上注明日期
Date ID Status
0 2017-04-26 1 F
2 2017-05-16 1 M
3 2017-07-06 1 F
5 2018-01-14 1 F
1 2017-05-06 2 F
4 2017-09-06 2 F
8 2018-07-06 2 M
12 2019-05-06 2 M
13 2019-10-06 2 F
6 2017-07-16 3 M
9 2018-01-06 3 F
10 2018-07-06 3 M
11 2019-07-06 3 F
7 2017-07-16 4 F
14 2019-11-06 4 M
我的预期输出是带有F-F,F-M的2个表,如下所示。
设置子集后,我期望以下两个数据帧。
说明: 排序后,按ID明智的状态顺序将为
ID
1 [F, M, F, F]
2 [F, F, M, M, F]
3 [M, F, M, F]
4 [F, M]
第一次过滤/父数据帧子集后的F-F数据帧
Date ID Status
0 2017-07-06 1 F
1 2018-01-14 1 F
2 2017-05-06 2 F
3 2017-09-06 2 F
第二次过滤后的F-M数据帧
Date ID Status
0 2017-04-26 1 F
1 2017-05-16 1 M
2 2017-09-06 2 F
3 2018-07-06 2 M
4 2018-01-06 3 F
5 2018-07-06 3 M
6 2017-07-16 4 F
7 2019-11-06 4 M
我尝试了以下代码
df_status = df.groupby('ID')['Status'].apply(list)
dict_st= df_status.to_frame().to_dict().get('Status')
df_status如下所示
ID
1 [F, M, F, F]
2 [F, F, M, M, F]
3 [M, F, M, F]
4 [F, M]
那之后我被困住了。我不知道要继续。