Python 如何获取类型为a的第一个注册表和类型为B的第一个注册表并将其移动到一行

Python 如何获取类型为a的第一个注册表和类型为B的第一个注册表并将其移动到一行,python,pandas,bigdata,databricks,Python,Pandas,Bigdata,Databricks,我正在尝试使用python和pandas来获取类型为A或B的第一个注册表和类型为C或D的第一个注册表,并将其移动到一行。我要这张身份证 我将很容易用这个示例案例进行演示 Id、类型、日期时间 1,A,2018-01-01 1,I,2018-01-02 1,I,2018-01-03 2018年1月1日至4日 2,I,2018-01-01 2018年1月2日,星期二 2018年1月3日,日本 2018年1月4日,韩国 2018年1月2日至5日 2018年1月2日至6日 2018年1月3日 2018

我正在尝试使用python和pandas来获取类型为A或B的第一个注册表和类型为C或D的第一个注册表,并将其移动到一行。我要这张身份证

我将很容易用这个示例案例进行演示


Id、类型、日期时间
1,A,2018-01-01
1,I,2018-01-02
1,I,2018-01-03
2018年1月1日至4日
2,I,2018-01-01
2018年1月2日,星期二
2018年1月3日,日本
2018年1月4日,韩国
2018年1月2日至5日
2018年1月2日至6日
2018年1月3日
2018年1月3日至9日
2018年1月3日,星期四
2018年1月4日至5日
2018年1月4日至4日

我希望处理的结果是


Id、ProcessEvent、ProcessDate、DispatchedEvent、DispatchedDate
2018-01-01,2018-01-04
2018年1月1日,2018年1月5日
2018年1月3日,2018年1月3日,2018年1月9日
2018-01-03,2018-01-04

我目前正试图在DataRicks集群中使用python和pandas来实现这一点,但我也有其他想法,我需要在总计数TB的文件中实现这一点,因此它是一个大数据集,因此必须考虑速度,并且我无法将整个数据集存储在内存中。

首先通过和进行过滤,按每列
Id
删除重复项,设置为索引和
重命名
列名称:

df['Datetime'] = pd.to_datetime(df['Datetime'])
df = df.sort_values(['Id','Datetime'])

df1 = (df[df['type'].isin(['A','B'])]
          .drop_duplicates('Id')
          .set_index('Id')
          .rename(columns={'type':'ProcessEvent','Datetime':'ProcessDate'}))
df2 = (df[df['type'].isin(['C','D'])]
          .drop_duplicates('Id')
          .set_index('Id')
          .rename(columns={'type':'DispatchedEvent','Datetime':'DispatchedDate'}))
最后:

df = pd.concat([df1, df2], axis=1).reset_index()
print (df)
   Id ProcessEvent ProcessDate DispatchedEvent DispatchedDate
0   1            A  2018-01-01               C     2018-01-04
1   2            B  2018-01-02               D     2018-01-05
2   3            A  2018-01-03               D     2018-01-09
3   4            A  2018-01-03               C     2018-01-04

如果
C
行在
A
行之前,该怎么办?你想要每个id这个吗?按照数据的结构,c行不可能在A行之前,但如果是,我仍然会得到A或B的时间和c的时间。不管c是在A之前还是在B之前,我都想要每个id这个。对不起,那么如何区分哪个
id
有类型
A,c
和哪个
B,D
?可能有助于添加另一个带有输出的
Id
?该Id是否有A、C或B、D或A、D或B、C无关紧要,我想要第一个A或B以及第一个C或D。添加了另一个示例Id 3这是否适用于文件中C在D之前但日期较早的情况?例如,`` Id,type,Datetime 4,A,2018-01-01 4,C,2018-01-03 4,D,2018-01-02``如果不是的话,那会生成4,A,2018-01-0,D,2018-01-02吗?我可以在之前按日期添加一个订单。@GabrielMonteiroNepomuceno-你能更改样本数据吗?可能首先需要排序。更正了示例数据。@GabrielMonteiroNepomuceno-首先转换为datetime并按列Id和datetime排序,检查编辑的答案。