小编use*_*642的帖子

在 Pandas 中使用 .loc 会减慢计算速度

我有以下数据框,我想将底部 1% 的值分配给新列。当我使用“.loc”通知进行此计算时,使用 .loc 分配大约需要 10 秒,而替代解决方案仅需要 2 秒。

df_temp = pd.DataFrame(np.random.randn(100000000,1),columns=list('A'))
%time df_temp["q"] = df_temp["A"].quantile(0.01)
%time df_temp.loc[:, "q1_loc"] = df_temp["A"].quantile(0.01)
Run Code Online (Sandbox Code Playgroud)

为什么 .loc 解决方案更慢?我知道使用 .loc 解决方案更安全,但如果我想将数据分配给列中的所有索引,直接分配会出现什么问题?

python pandas

5
推荐指数
1
解决办法
1285
查看次数

熊猫重新采样到特定的工作日

我有一个 Pandas 数据框,我想在每个月的第三个星期五重新采样。

np.random.seed(0)
#requested output:
dates = pd.date_range("2018-01-01", "2018-08-31")
dates_df = pd.DataFrame(data=np.random.random(len(dates)), index=dates)
mask = (dates.weekday == 4) & (14 < dates.day) & (dates.day < 22)
dates_df.loc[mask]
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

但是当缺少第三个星期五时(例如删除 2 月的第三个星期五),我想获得最新的值(截至 2018-02-15)。使用掩码给我下一个值(2 月 17 日而不是 2 月 15 日):

# remove February third Friday:
dates_df = dates_df.drop([pd.to_datetime("2018-02-16")])
mask = (dates.weekday == 4) & (14 < dates.day) & (dates.day < 22)
dates_df.loc[mask]
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

将每月重新采样与 loffset 结合使用给出了抵消索引的月末值,这也不是我想要的:

from pandas.tseries.offsets import WeekOfMonth
dates_df.resample("M", loffset=WeekOfMonth(week=2, weekday=4)).last()
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

是否有替代方法(最好使用重新采样)而不必先重新采样为每日值然后添加掩码(这需要很长时间才能在我的数据帧上完成)

python time-series pandas

4
推荐指数
1
解决办法
2851
查看次数

标签 统计

pandas ×2

python ×2

time-series ×1