熊猫:查找DF

时间:2016-12-01 15:29:02

标签: python pandas

我的数据框有2列,时间和压力,大约有3000行,如下所示:

time  value
0    393
1    389
2    402
3    408
4    413
5    463
6    471
7    488
8    422
9    404
10   370

我想找到1)最常见的压力值和2)经过多少时间步后我们看到这个值。到目前为止我的代码是这样的:

import numpy as np
import pandas as pd
from matplotlib.pylab import *
import re
from pylab import *
import datetime
from scipy import stats

pd.set_option('display.max_rows', 5000)

df = pd.read_csv('copy.csv')
row = next(df.iterrows())[0]
dataset = np.loadtxt(df, delimiter=";")

df.columns = ["LTimestamp", "LPressure"]
list(df.columns.values)

## Timestep
df = pd.DataFrame({'timestep': df.LTimestamp, 'value': df.LPressure})
df['timestep'] = pd.to_datetime(df['timestep'], unit='ms').dt.time
# print(df)

## Find most seen value in pressure
count = df['value'].value_counts().sort_values(ascending=[False]).nlargest(1).values[0]
print (count)

## Mask the df by comparing the column against the most seen value.
print(df[df['value'] == count])

## Find interval differences
x = df.loc[df['value'] == count, 'timestep'].diff() 
print(x)

输出为此,其中101是最频繁值(400)发生的次数。

>>> 101
>>> Empty DataFrame
>>> Columns: [timestep, value]
>>> Index: []
>>> Series([], Name: timestep, dtype: object)
>>> [Finished in 1.7s]

我不明白为什么它会返回一个空的Index数组。如果不是

print(df[df['value'] == count])

我用

print(df[df['value'] == 400])

我可以看到带有间隔差异的蒙面df,如下所示:

50        1.0
112      62.0
215     103.0
265      50.0
276      11.0
277       1.0
278       1.0
318      40.0
366      48.0
367       1.0

但是稍后,我会想要计算最小值,或者第二大等。这就是我想使用count而不是特定数字的原因。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:3)

我建议使用

>>> val = df['value'].value_counts().nlargest(1).index[0]
>>> df[df['value'] == val]
   time  value
2     2    402
3     3    402
7     7    402
8     8    402