2017-04-11 10 views
0

我在我的dateframe中有大量的点,所以我想放弃其中的一些(理想地保持平均值)。python pandas:如何在dateframe中删除项目

例如目前我有

date    calltime 
0 1491928756414930 4643 
1 1491928756419607 166 
2 1491928756419790 120 
3 1491928756419927 142 
4 1491928756420083 121 
5 1491928756420217 109 
6 1491928756420409 52 
7 1491928756420476 105 
8 1491928756420605 35 
9 1491928756420654 120 
10 1491928756420787 105 
11 1491928756420907 93 
12 1491928756421013 37 
13 1491928756421062 112 
14 1491928756421187 41 

有没有什么办法可以根据采样来减少一定数量的物品?

给出更多细节。我的问题是非常接近时间间隔的数值1491928756421062和1491928756421187

所以我有这样enter image description here

图表,而是我想以某种方式对那些接近间隔的平均值。但也许分组一秒...

+2

dateframe有一个sample()方法,它不适合你吗? – Muatik

+0

那么..样品给随机值。这不像我正在放弃一些价值 –

+0

你在寻找什么样的样品?你有一个你想要放弃价值的标准吗? – user2510479

回答

0

我会使用sample(),但正如你所说,它随机选择。如果您想根据某种逻辑进行采样,例如,只保留值为mean *.9 < value < mean * 1.1的行,则可以尝试以下代码。其实,这一切都取决于你的抽样策略。

作为一个例子,可以这样做。

test.csv:

1491928756414930,4643 
1491928756419607,166 
1491928756419790,120 
1491928756419927,142 
1491928756420083,121 
1491928756420217,109 
1491928756420409,52 
1491928756420476,105 
1491928756420605,35 
1491928756420654,120 
1491928756420787,105 
1491928756420907,93 
1491928756421013,37 
1491928756421062,112 
1491928756421187,41 

采样:

df = pd.read_csv("test.csv", ",", header=None) 
mean = df[1].mean() 
my_sample = df[(mean *.90 < df[1]) & (df[1] < mean * 1.10)] 
0

您正在寻找resample

df.set_index(pd.to_datetime(df.date)).calltime.resample('s').mean() 

这是一个更完整的例子

tidx = pd.date_range('2000-01-01', periods=10000, freq='10ms') 
df = pd.DataFrame(dict(calltime=np.random.randint(200, size=len(tidx))), tidx) 

fig, axes = plt.subplots(2, figsize=(25, 10)) 
df.plot(ax=axes[0]) 
df.resample('s').mean().plot(ax=axes[1]) 

fig.tight_layout() 

enter image description here