【问题标题】:Pandas: removing everything in a column after first value above threshold熊猫:在第一个值高于阈值后删除列中的所有内容
【发布时间】:2020-10-27 16:10:37
【问题描述】:

我对随机过程第一次越过阈值感兴趣。我将观察过程的结果存储在数据框中,并绘制了在我观察到 14 轮结束后该过程的几次实现跨越 0.9 的次数。

此图像是使用此代码创建的

import matplotlib.pyplot as plt
plt.style.use('ggplot')
fin = pd.DataFrame(data=np.random.uniform(size=(100, 13))).T
pos = (fin>0.9).astype(float) 
ax=fin.loc[:, pos.loc[12, :] != 1.0].plot(figsize=(12, 6), color='silver', legend=False)
fin.loc[:, pos.loc[12, :] == 1.0].plot(figsize=(12, 6), color='indianred', legend=False, ax=ax)

其中fin 包含随机数,而pos1 每次该进程越过0.9

我现在想为每个实现绘制第一次时间fin 中的过程与0.9 交叉(列代表实现,行代表观察时间)

我可以在idxmax() 中找到高于0.9 的值的第一次出现,但我很难理解如何在每列中删除数据框中的所有内容。

import numpy as np
import pandas as pd

df = pd.DataFrame(data=np.random.uniform(size=(100, 10)))
maxes = df.idxmax()

只是我在思考这个问题时遇到了很大的困难。

【问题讨论】:

    标签: python pandas matplotlib


    【解决方案1】:

    如果我理解正确,您可以使用

    df = df[df.index < maxes[0]]
    

    【讨论】:

      【解决方案2】:

      IIUC,我们可以使用带有 cumprod 的布尔矩阵:

      df.where((df < .9).cumprod().astype(bool)).plot()
      

      输出:

      【讨论】:

        猜你喜欢
        • 2020-03-03
        • 2022-06-16
        • 1970-01-01
        • 2020-08-06
        • 2018-11-19
        • 1970-01-01
        • 2021-12-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多