将数据帧中的行返回到整数列表

2024-06-01 03:05:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含多个列的dataframe和一些包含文本数据的1000行。一列包含按升序(0、0.45、0.87、1.10等)表示时间的浮点。在此基础上,我想构建一个新的数据帧,它只包含这些时间值最接近整数x=0,1,2,3……等等的所有行

在Stackoverflow上,我发现了一个非常相似的问题的答案,DSM发布的答案。代码基本上是这样的,修改(希望)给出-最接近x的数字,df是我的数据帧。在

df.loc[(df.ElapsedTime-x).abs().argsort()[:1]]

这似乎基本上满足了我对一个x值的需要,但我无法找出如何在整个数据帧上迭代这个值,以提取列值最接近x=0,1,2,3的行。这段代码给了我一个数据帧,必须有一种方法来循环这个并附加结果数据帧以获得所需的结果?在

我试过了:

^{pr2}$

L,原则上有正确的行,但它是一个混乱的列表,执行起来需要很长时间,因为for循环不是遍历数据帧的好方法。我更希望得到一个数据帧作为结果。在

我觉得我错过了一些小事。在

不知道如何发布所需的数据帧。在

假设时间值是(取自我的数据帧):

0.00,0.03,0.58,1.59,1.71,1.96,2.21,2.33,2.46,2.58,2.7,2.83,2.95,3.07  

为0,1,2,3获取的值将为0.58,1.96,2.95

@beroe:如果数字是0.8,1.1,1.4,2.8,在这种情况下,1.1应该是1,1.4应该是2。例如,数字是0.5 1.5 2.5。虽然我认为这不太可能发生在我的数据中,但我认为把1.5作为1和2.5作为2是很好的。在这个应用程序中,我不认为它是那么关键,尽管我不确定我将如何实现这一点。在

如果有人需要其他信息,请告诉我。在


Tags: 数据方法答案代码文本dataframedf时间
2条回答

不知道这会有多快,但您可以取整时间以获得“整数”候选值,取差值的绝对值为自己找到最接近的,然后按差进行排序,然后groupby返回接近整数的行的整数时间:

# setting up my fake data 
df=pd.DataFrame()
df['ElapsedTime']=pd.Series([0.5, 0.8, 1.1, 1.4, 1.8, 2.2, 3.1])

# To use your own data set, set df = Z, and start here...
df['bintime'] = df.ElapsedTime.round()
df['d'] = abs(df.ElapsedTime - df.bintime)
dfindex = df.sort('d').groupby('bintime').first()

对于上面定义的假时间序列,dfindex的内容是:

^{pr2}$

考虑下面的pd.Seriess

s = pd.Series(np.arange(5000), np.random.rand(5000) * 100).sort_index()

s.head()

0.002587    3007
0.003418    4332
0.060767    2045
0.125182    3179
0.134487    4614
dtype: int64

获取所有最接近的整数:

^{pr2}$

然后使用method='nearest'重新编制索引

^{3}$

相关问题 更多 >