熊猫:在第一个值高于阈值后删除列中的所有内容

时间:2020-10-27 16:10:37

标签: python pandas matplotlib

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

enter image description here

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

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包含随机数,而每次经过pos时,1就是0.9

我现在想绘制每个实现的fin中的过程越过0.9时的 first 图(列代表实现,行代表观察时间)

我可以在0.9中找到idxmax()之上的值的第一次出现,但是我很困惑如何删除每一列之后的数据框中的所有内容。

import numpy as np
import pandas as pd

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

这只是我在思考这个问题时遇到的真正困难。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

IIUC,我们可以将布尔矩阵与cumprod一起使用:

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

输出:

enter image description here