我有一个如下所示的数据帧输出。
dateparse = lambda x: dt.datetime.strptime(x, "%d:%m:%Y %H:%M:%S")
df = pd.read_csv('somefile', skiprows = 6, na_values = ['-999.000000'], parse_dates={'times':[0,1]}, date_parser=dateparse)
df = df.set_index('times')
print(df)
times A B C D \
0 2003-01-01 00:34:38 0.082516 0.102096 0.143908 0.227867
1 2003-01-01 00:38:57 0.085833 0.106582 0.149704 0.238216
2 2003-01-01 00:44:07 0.084019 0.103900 0.146425 0.232553
3 2003-01-01 00:50:18 0.085005 0.105516 0.148011 0.235786
4 2003-01-01 00:57:57 0.089478 0.110041 0.155636 0.247485
5 2003-01-01 01:07:31 0.090858 0.112727 0.157333 0.250582
6 2003-01-01 01:18:11 0.095183 0.118650 0.166181 0.266422
7 2003-01-01 01:24:54 0.095459 0.118206 0.165703 0.265689
8 2003-01-01 01:33:24 0.096138 0.118215 0.165815 0.264526
9 2003-01-01 01:48:11 0.093621 0.116163 0.162775 0.260970
10 2003-01-01 02:03:11 0.097354 0.120059 0.167964 0.270480
11 2003-01-01 02:18:12 0.095817 0.118176 0.166490 0.266451
12 2003-01-01 02:24:50 0.094345 0.113859 0.161243 0.256563
13 2003-01-01 02:33:12 0.093151 0.112366 0.158082 0.252427
14 2003-01-01 02:48:12 0.088426 0.108625 0.152767 0.246545
15 2003-01-01 03:03:11 0.090825 0.111603 0.156169 0.252650
16 2003-01-01 03:18:12 0.088676 0.107009 0.150868 0.241441
17 2003-01-01 03:24:51 0.091120 0.107680 0.153139 0.245209
18 2003-01-01 03:33:12 0.094014 0.113787 0.159610 0.256748
19 2003-01-01 03:48:13 0.090774 0.110138 0.155652 0.252272
20 2003-01-01 04:03:12 0.091755 0.111134 0.158139 0.256281
21 2003-01-01 04:18:12 0.105797 0.127926 0.182425 0.300056
22 2003-01-01 04:33:12 0.108270 0.130971 0.184997 0.309122
23 2003-01-01 04:48:13 0.112102 0.136731 0.192955 0.323832
24 2003-01-01 05:03:12 0.113862 0.139115 0.195716 0.330440
25 2003-01-01 05:18:13 0.109960 0.134348 0.187129 0.317269
26 2003-01-01 05:24:50 0.111670 0.133918 0.187268 0.315839
27 2003-01-01 05:33:12 0.115415 0.139826 0.195095 0.330612
28 2003-01-01 05:48:11 0.108153 0.130107 0.181749 0.311513
29 2003-01-01 06:03:11 0.124846 0.150228 0.209006 0.360110
... ... ... ... ... ...
62094 2012-12-30 02:32:45 0.076481 0.082212 0.098530 0.127626
62095 2012-12-30 04:02:46 0.074581 0.075652 0.093802 0.121700
62096 2012-12-30 04:17:45 0.069553 0.069642 0.087689 0.111479
62097 2012-12-30 04:24:45 0.078354 0.078970 0.098119 0.129527
62098 2012-12-30 04:32:46 0.082699 0.081013 0.102228 0.134887
62099 2012-12-30 04:47:45 0.085212 0.089094 0.108791 0.141562
62100 2012-12-30 07:56:36 0.085549 0.090656 0.110367 0.158078
62101 2012-12-30 08:01:01 0.088070 0.094420 0.114416 0.164917
62102 2012-12-31 01:35:43 0.199741 0.223171 0.286124 0.447926
62103 2012-12-31 01:48:13 0.217590 0.244189 0.308924 0.477287
62104 2012-12-31 02:18:12 0.209208 0.229590 0.283930 0.422209
62105 2012-12-31 02:25:06 0.225229 0.245545 0.301449 0.445500
62106 2012-12-31 02:33:12 0.236910 0.258252 0.313862 0.460853
62107 2012-12-31 03:03:13 0.228002 0.246693 0.302313 0.445168
62108 2012-12-31 03:18:13 0.235366 0.257824 0.317586 0.475176
62109 2012-12-31 03:25:07 0.246707 0.269936 0.332616 0.498684
62110 2012-12-31 03:33:13 0.246553 0.269369 0.330051 0.490452
62111 2012-12-31 04:25:10 0.249062 0.268720 0.320451 0.454450
62112 2012-12-31 04:33:13 0.251103 0.269946 0.321919 0.456619
62113 2012-12-31 04:48:13 0.257122 0.278713 0.335067 0.488326
62114 2012-12-31 05:03:14 0.274840 0.298629 0.361423 0.536313
62115 2012-12-31 05:18:14 0.272331 0.297988 0.361081 0.540261
62116 2012-12-31 05:33:13 0.259284 0.280575 0.336578 0.490123
62117 2012-12-31 05:48:13 0.281216 0.305000 0.364803 0.533686
62118 2012-12-31 07:03:13 0.316535 0.346806 0.418629 0.643321
62119 2012-12-31 07:18:13 0.287614 0.315958 0.383844 0.597279
62120 2012-12-31 07:46:05 0.323202 0.350592 0.430860 0.657584
62121 2012-12-31 07:52:16 0.288645 0.319988 0.389610 0.622262
62122 2012-12-31 07:57:24 0.294492 0.328670 0.398978 0.638286
62123 2012-12-31 08:01:45 0.287507 0.320027 0.391866 0.636343
我希望实现的目标是,如果任何指数'时间'在该年 - 月 - 日中少于30点(即2003-01-01或任何其他日期的数据点少于30) ,设置A,B,C,D = NAN。有一个简单的方法吗?
答案 0 :(得分:1)
使用groupby
创建一个掩码,然后使用loc
分配:
m = df.set_index('times')\
.groupby(pd.TimeGrouper(freq='D')).A.transform(len).lt(30)
df.loc[m.values, ['A', 'B', 'C', 'D']] = np.nan