python - 将数据框中的行返回到整数列表

标签 python python-3.x pandas

我有一个包含多列和几 1000 行文本数据的数据框。一列包含按升序表示时间的 float (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 值,但我无法弄清楚如何在 -entire- 数据帧上迭代它以提取列值最接近 x = 0 的 -all- 行, 1,2,3....按升序排列。这段代码给了我一个数据框,必须有一种方法可以循环它并附加生成的数据框以获得所需的结果吗?

我试过这个:

L=[]
for x in np.arange(len(df)):
    L.append(df.loc[(df.ElapsedTime-x).abs().argsort()[:1]])
L   

L,原则上具有正确的行,但它是一个困惑的列表,并且需要很长时间才能执行,因为 for 循环不是遍历数据框的好方法。我希望得到一个数据框作为结果。

我觉得我遗漏了一些微不足道的东西。

不确定如何发布所需的数据框。

假设时间值是(取 self 的数据框):

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,为 2 抓取 1.4。例如,如果数字为 0.5 1.5 2.5。虽然我认为这不太可能发生在我的数据中,但我认为将 1.5 用作 1 并将 2.5 用作 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的内容是:

         ElapsedTime    d
bintime                  
0                0.5  0.5
1                1.1  0.1
2                1.8  0.2
3                3.1  0.1

关于python - 将数据框中的行返回到整数列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38709595/

相关文章:

python - Python 中的高级/抽象 Canbus 接口(interface)

python pip 错误 pkg_resources.DistributionNotFound

python - 在 Linux 上使用 Webdav 从 SkyDrive 获取文件 *无需* 安装

python - 根据文件名自动创建文件夹

python - 更新数据框中的多个单元格值

Python 将行转换为数组

python - 为 pandas rolling mean 制作自定义窗口类型

python - 如何在 scikit-learn 或 Neuraxle 中并行运行 2 个管道?

python - 使用环境变量的curl请求可以工作,但在python3请求上失败

python - 从服务器流式传输视频