如何解决在嵌套的for循环中使用append时丢失索引的问题 - python

我想从另一个数据框中的阈值(第5个百分点)以下的数据框中过滤出行

我尝试做一个嵌套的for循环并附加输出,但是索引丢失了
而且运行时间真的超过了两分钟

我有一个称为Fiveperc的数据框,其格式为(366,1):

    tmin
1   11.32
2   11.0
3   11.41
4   11.885
5   12.155
....
366 13.08

和另一个数据帧df2,格式为(18910,1)

date    tmin
1966-01-01  13.9
1966-01-02  17.1
1966-01-03  17.1
1966-01-04  16.2
.....
2018-12-31  17

使用:

anomaly = []
for yearday,perc in fiveperc.iterrows():
    for date,temp in df2.iterrows():
        if yearday == date.dayofyear:
            anomaly.append(temp - perc)
anomaly = pd.DataFrame(anomaly) 

使用上面的代码的第一块具有一个输出数据帧(18910,1):

index   tmin
0   2.58
1   3.27
2   4.27
3   2.08
4   -3.52
....
18909   5.579

这里的问题是df2中的datetime索引丢失了,导致了另一种安排!
而且此嵌套的for循环需要两分钟的时间才能运行。

如果我得到以上工作的代码,则额外的代码:

anomaly[anomaly>0]=np.nan
anomaly[anomaly<0]= 1 
anomaly.replace(0, np.nan, inplace=True)
Frequency = pd.DataFrame(final.groupby(lambda x: x.dayofyear)['anomaly'].agg(sum))

有更好的方法吗?

参考方案

您可以在带有dt访问器的列上查找一年中的某天:

In [11]: df
Out[11]:
        date  tmin
0 1966-01-01  13.9
1 1966-01-02  17.1
2 1966-01-03  17.1
3 1966-01-04  16.2

In [12]: df1
Out[12]:
     tmin
1  11.320
2  11.000
3  11.410
4  11.885
5  12.155

In [13]: df1.loc[df.date.dt.dayofyear, "tmin"]
Out[13]:
1    11.320
2    11.000
3    11.410
4    11.885
Name: tmin, dtype: float64

In [14]: df["tmin"] - df1.loc[df.date.dt.dayofyear, "tmin"].values
Out[14]:
0    2.580
1    6.100
2    5.690
3    4.315
Name: tmin, dtype: float64

您也可以使用groupby转换来执行此操作,但是我怀疑这会稍微慢一些:

In [21]: df.groupby(df.date.dt.dayofyear)["tmin"].transform(lambda x: x - df1.loc[x.name, "tmin"])
Out[21]:
0    2.580
1    6.100
2    5.690
3    4.315
Name: tmin, dtype: float64

Python sqlite3数据库已锁定 - python

我在Windows上使用Python 3和sqlite3。我正在开发一个使用数据库存储联系人的小型应用程序。我注意到,如果应用程序被强制关闭(通过错误或通过任务管理器结束),则会收到sqlite3错误(sqlite3.OperationalError:数据库已锁定)。我想这是因为在应用程序关闭之前,我没有正确关闭数据库连接。我已经试过了: connectio…

Python:如何根据另一列元素明智地查找一列中的空单元格计数? - python

df = pd.DataFrame({'user': ['Bob', 'Jane', 'Alice','Jane', 'Alice','Bob', 'Alice'], 'income…

如何创建在单击按钮时显示动态数据的视图 - python

我是oodoo的新手,并且坚持创建一个窗体视图,该窗体视图在单击按钮时显示动态数据。场景是,当我单击“下一步”(按钮)时,视图上的数据将根据背后的逻辑发生变化(不更新,仅显示另一个记录数据)为了了解问题,请看图片。Sample View任何帮助将不胜感激,如果可以通过任何其他对我有用的方式实现。谢谢。 python大神给出的解决方案 在您的问题中,您创建了一…

Python-Excel导出 - python

我有以下代码:import pandas as pd import requests from bs4 import BeautifulSoup res = requests.get("https://www.bankier.pl/gielda/notowania/akcje") soup = BeautifulSoup(res.cont…

Python:传递记录器是个好主意吗? - python

我的Web服务器的API日志如下:started started succeeded failed 那是同时收到的两个请求。很难说哪一个成功或失败。为了彼此分离请求,我为每个请求创建了一个随机数,并将其用作记录器的名称logger = logging.getLogger(random_number) 日志变成[111] started [222] start…