python pandas:如何在dateframe中删除项目

时间:2017-04-11 19:16:05

标签: python pandas numpy

我的日期框架中有很多分数,所以我想放弃其中的一些(理想情况下保持平均值)。

e.g。目前我有

void mergeFront(struct Squeue* squeue){

  struct Node* node1 = squeue->first;  if (node1 == NULL) return;
  struct Node* node2 = node1->next;    if (node2 == NULL) return;

  char* str1 = node1->val;  size_t str1len = strlen(str1);
  char* str2 = node2->val;  size_t str2len = strlen(str2);
  char* merged = malloc(str1len + str2len + 1);
  memcpy(merged, str1,str1len + 1);
  strcpy(merged+str1len, str2);

  node1->val = NULL;
  free(node1->val);
  node1->val = merged;

  node1->next = node2->next;

  node2->val = NULL;
  free(node2->val);
  free(node2);

根据抽样,有没有办法丢弃一些项目?

提供更多详情。我的问题是非常接近的间隔的值的数量,例如1491928756421062和1491928756421187

所以我有一个像enter image description here

这样的图表

相反,我希望以某种方式获得那些间隔时间的平均值。但也许可以按一秒钟分组......

2 个答案:

答案 0 :(得分: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)]

答案 1 :(得分: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