我有一个数据框,其中两列 Start
和 End
是日期列表。我想要做的是创建两个单独的数据帧,其中对于第一个数据帧,Start
列中的第一个值与 End
列中的值匹配,而对于第二个数据帧 Start
列中的第二个值也与 End
列中的值匹配。
基本上,如果 Start
列中有两个值,则只要 End
列中的日期在第一个日期之后且在第二个日期之前 (如下面示例中的 BBB 行所示),然后我想将这些值放入两个单独的数据帧中。此外,即使 End
列中没有日期(如下面示例中的 EEE 行),我仍然想拆分它。最后,如果 Start
和 End
列中的一个或两个为空,则它们将保留在两个数据帧中。
例如,对于下面的数据框:
Name Start End
AAA 2017-09-13
BBB 2021-11-20, 2022-06-04 2022-04-07
CCC 2022-09-29
DDD
EEE 2021-04-28, 2022-06-14
我试图让第一个数据框看起来像这样:
Name Start End
AAA 2017-09-13
BBB 2021-11-20 2022-04-07
CCC 2022-09-29
DDD
EEE 2021-04-28
第二个数据框如下所示:
Name Start End
AAA 2016-09-13
BBB 2022-06-04 2022-04-07
CCC 2022-09-29
DDD
EEE 2022-06-14
如果Start
和End
列中的日期不在列表中,那会稍微容易一些,但到目前为止我发现很难思考一种计算快速的方法,因此我们将不胜感激,谢谢!
最佳答案
您可以使用:
tmp_df = df.assign(Start=df['Start'].str.split(',')).explode('Start')
df1 = tmp_df.groupby(level=0).first()
df2 = tmp_df.groupby(level=0).last()
注意。如果您已有列表,则可以跳过 .assign(Start=df['Start'].str.split(','))
。
输出:
# df1
Name Start End
0 AAA 2017-09-13 None
1 BBB 2021-11-20 2022-04-07
2 CCC None 2022-09-29
3 DDD None None
4 EEE 2021-04-28 None
# df2
Name Start End
0 AAA 2017-09-13 None
1 BBB 2022-06-04 2022-04-07
2 CCC None 2022-09-29
3 DDD None None
4 EEE 2022-06-14 None
关于python - 将数据框中的日期拆分为 2 个单独的数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74221572/