我的时间序列数据有重复的时间戳索引,但我只想根据整数位置删除一行。例如,如果我有以下内容:
import numpy as np
import pandas as pd
dates = pd.to_datetime(["2015-10-22 09:40:00","2015-10-22 09:40:00","2015-10-22 09:40:00","2015-10-22 09:50:00","2015-10-22 10:00:00"])
data_rand = np.random.rand(len(dates),3)
col_head = ['A','B','C']
df = pd.DataFrame(data=data_rand, index=dates, columns=col_head)
print(df)
rowindex = 1
df.drop(df.index[rowindex], inplace=True)
#df.drop(df.index.iloc[[rowindex]], inplace=True)
print(df)
数据输出的数据框如下:
A B C
2015-10-22 09:40:00 0.755642 0.797471 0.366410
2015-10-22 09:40:00 0.475411 0.629229 0.733368
2015-10-22 09:40:00 0.003278 0.461901 0.184833
2015-10-22 09:50:00 0.803465 0.218510 0.864337
2015-10-22 10:00:00 0.153356 0.950724 0.249950
现在,如果我想删除第二行,我会使用drop函数,但因为有两个其他标签具有完全相同的索引,所以三个都将被删除。有没有办法只删除三个重复时间戳的中间?我宁愿这样做而不重置索引。
我希望数据看起来像这样:
A B C
2015-10-22 09:40:00 0.755642 0.797471 0.366410
2015-10-22 09:40:00 0.003278 0.461901 0.184833
2015-10-22 09:50:00 0.803465 0.218510 0.864337
2015-10-22 10:00:00 0.153356 0.950724 0.249950
答案 0 :(得分:1)
您可以使用iloc
或loc
In [5055]: idx = np.ones(len(df.index), dtype=bool)
In [5057]: idx[rowindex] = False
In [5058]: df.iloc[idx] # or df.loc[idx]
Out[5058]:
A B C
2015-10-22 09:40:00 0.704959 0.995358 0.355915
2015-10-22 09:40:00 0.151127 0.398876 0.240856
2015-10-22 09:50:00 0.343456 0.513128 0.666625
2015-10-22 10:00:00 0.105908 0.130895 0.321981
详细
In [5059]: df
Out[5059]:
A B C
2015-10-22 09:40:00 0.704959 0.995358 0.355915
2015-10-22 09:40:00 0.762548 0.593177 0.691702
2015-10-22 09:40:00 0.151127 0.398876 0.240856
2015-10-22 09:50:00 0.343456 0.513128 0.666625
2015-10-22 10:00:00 0.105908 0.130895 0.321981
答案 1 :(得分:0)
使用np.arange和iloc选择rowindex
以外的行。与删除rowindex
很相似,(我建议在考虑删除多行索引的情况下@ Zero的答案)
rowindex = 2
ndf = df.iloc[~(np.arange(df.shape[0]) == rowindex )]
输出:
A B C 2015-10-22 09:40:00 0.568431 0.302549 0.497309 2015-10-22 09:40:00 0.683263 0.916699 0.108929 2015-10-22 09:50:00 0.751543 0.480892 0.797728 2015-10-22 10:00:00 0.282703 0.433418 0.009757
df A B C 2015-10-22 09:40:00 0.568431 0.302549 0.497309 2015-10-22 09:40:00 0.683263 0.916699 0.108929 2015-10-22 09:40:00 0.495492 0.232836 0.436861 2015-10-22 09:50:00 0.751543 0.480892 0.797728 2015-10-22 10:00:00 0.282703 0.433418 0.009757
答案 2 :(得分:0)
您可以使用整数位置来查找行的名称(即索引):
df = df.drop(df.iloc[i].name)