gpt4 book ai didi

python - 当条件是另一个 DataFrame 中的行时过滤 DataFrame 中的行

转载 作者:太空宇宙 更新时间:2023-11-04 02:35:47 25 4
gpt4 key购买 nike

我有一个巨大的时间序列 DataFrame(大约 100 000 000 行),我需要按条件过滤行。每个条件都在另一个数据帧的每一行中。这个 Dataframe 有大约 2000 行,每一行都是条件。玩具示例:

df = pd.DataFrame({val: [1, 3, 2, 4, 3, 1, 2, 3], date: [2015-03-12, 2015-04-12, 2015-05-13, 2016-03-12, 2016-04-07, 2016-05-12, 2017-01-11, 2017-03-20]})
df_condition = pd.DataFrame({val: [2, 3], date: [2015-07-13, 2016-04-08]})

条件是删除df中的所有raws,其中val出现早于df_condition中的date:

df = df[(df['val']==2) & (df['date']>'2015-07-13')]
df = df[(df['val']==3) & (df['date']>'2016-04-08')]

等等大约2000个条件

我是这样用的,但是时间太长了(大概5个小时)。有没有更快的方法?

vals = df_condition.val.values
dates = vals = df_condition.dates.values
for i in range(len(df_condition)):
df = df[~((df.val==vals[i])&(df.date < dates[i]))]

最佳答案

我相信您可以创建所有掩码的列表,然后 reduce :

masks = [(df.val==x.val)&(df.date >= x.date) for x in df_condition.itertuples()]
print (masks)
[0 False
1 False
2 False
3 False
4 False
5 False
6 True
7 False
dtype: bool, 0 False
1 False
2 False
3 False
4 False
5 False
6 False
7 True
dtype: bool]

df1 = df[np.logical_and.reduce(masks)]

关于python - 当条件是另一个 DataFrame 中的行时过滤 DataFrame 中的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47938804/

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