gpt4 book ai didi

python-3.x - 从具有不同开始日期的第二个数据框中过滤第一个数据框的行

转载 作者:行者123 更新时间:2023-12-04 12:31:14 25 4
gpt4 key购买 nike

我有两个数据框,必须从中创建一个新的数据框。第一个在下面给出。

data = {'ID':['A', 'A', 'A', 'A', 'A', 'B','B','B','B', 'C','C','C','C','C','C', 'D','D','D'],
'Date':['2021-2-13', '2021-2-14', '2021-2-15', '2021-2-16', '2021-2-17', '2021-2-16', '2021-2-17', '2021-2-18', '2021-2-19',
'2021-2-12', '2021-2-13', '2021-2-14', '2021-2-15', '2021-2-16','2021-2-17', '2021-2-14', '2021-2-15', '2021-2-16'],
'Steps': [1000, 1200, 1500, 2000, 1400, 4000,3400, 5000,1000, 3500,4000,5000,5300,2000,3500, 5000,5500,5200 ]}
df1 = pd.DataFrame(data)

df1

还附上了这张图片。

DataFrame 1

第二个数据框包含每个参与者的开始日期,如下所示。

data1 = {'ID':['A', 'B', 'C', 'D'],
'Date':['2021-2-15', '2021-2-17', '2021-2-16', '2021-2-15']}
df2 = pd.DataFrame(data1)

df2

它的片段如下。

enter image description here

现在,生成的数据框必须是这样的,对于 Dataframe1 中的每个参与者,行必须从第二个 Dataframe 中给定的日期开始。必须删除该开始日期之前的行。

最终数据框的外观如下所示。

enter image description here

非常感谢任何帮助。谢谢

最佳答案

您可以使用 .merge + bool 索引:

df1["Date"] = pd.to_datetime(df1["Date"])
df2["Date"] = pd.to_datetime(df2["Date"])

x = df1.merge(df2, on="ID", suffixes=("", "_y"))
print(x.loc[x.Date >= x.Date_y, df1.columns].reset_index(drop=True))

打印:

  ID       Date  Steps
0 A 2021-02-15 1500
1 A 2021-02-16 2000
2 A 2021-02-17 1400
3 B 2021-02-17 3400
4 B 2021-02-18 5000
5 B 2021-02-19 1000
6 C 2021-02-16 2000
7 C 2021-02-17 3500
8 D 2021-02-15 5500
9 D 2021-02-16 5200

或者:如果 df2 中缺少某些 ID:

x = df1.merge(df2, on="ID", suffixes=("", "_y"), how="outer").fillna(pd.Timestamp(0))
print(x.loc[x.Date >= x.Date_y, df1.columns].reset_index(drop=True))

关于python-3.x - 从具有不同开始日期的第二个数据框中过滤第一个数据框的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68929926/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com