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

标签 python-3.x pandas dataframe data-analysis data-processing

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

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/

相关文章:

python - 正则表达式模式以匹配 python 中的日期时间

python - 根据列属性对多索引级别进行排序

python - 将 Series 转换为 DataFrame

python - 将 csv 转换为 json

python - 无法从源代码构建 SciPy,因为缺少 pybind11

python - 在 Python 中模拟模拟对象的方法?

python - Pandas 旋转一个列并填充另一个旋转的列

python - 发生错误时关闭文件而不保存 - Python

python - 我需要计算数据框列

python - 如果值是数据框中的 int 类型并选择不正确的行,则逐行检查