Python 将频率表转换为熊猫中的原始数据

Python 将频率表转换为熊猫中的原始数据,python,pandas,Python,Pandas,我有一个传感器。出于某些原因,传感器喜欢这样记录数据: >df obs count -0.3 3 0.9 2 1.4 5 i、 e.它首先记录观察结果,并据此制作计数表。我想做的是将这个df转换成一个带有原始观测值的序列。例如,我想以:[-0.3,-0.3,-0.3,0.9,0.9,1.4,1.4….]结束 询问excel。如果您的数据帧结构与此类似: 这是一个选项,使用numpy.repeat: i

我有一个传感器。出于某些原因,传感器喜欢这样记录数据:

>df
        obs  count
       -0.3    3
        0.9    2
        1.4    5
i、 e.它首先记录观察结果,并据此制作计数表。我想做的是将这个df转换成一个带有原始观测值的序列。例如,我想以:[-0.3,-0.3,-0.3,0.9,0.9,1.4,1.4….]结束


询问excel。

如果您的数据帧结构与此类似:

这是一个选项,使用numpy.repeat:

   import numpy as np

   times = df['count'] 

   df2['obs'] = np.concatenate([np.repeat(df['obs'],times)])

   print(df2)

          obs
       0 -0.3
       1 -0.3
       2 -0.3
       3  0.9
       4  0.9
       5  1.4
       6  1.4
       7  1.4
       8  1.4
       9  1.4

df['obs']是给定值出现次数的计数。由于大多数库都需要原始数据,所以很难使用freq表。由于原始订单信息已丢失,您意识到从频率计数到原始观测值之间没有唯一的映射,对吗?是的,我理解。秩序并不重要。所有数据基本上都是以秒为单位记录的。
df['obs']。重复(df['count'])
将为您提供一个新系列。。。然后,您可以使用
.tolist()。。。我猜这就是你想要的?如果你想使用
numpy.repeat
而不是
pandas.Series.repeat
,那么你就不需要连接东西了。。。只要
np.重复(df['obs'],df['count'])
就可以了。。。或者,也可以使用pandas中提供的方法:
df['obs']。重复(df['count'])
将执行相同的操作。我不确定您提出的解决方案。试试:df2=np。重复(df['obs'],df['count'])并打印df2。所有元素“-0.3”的索引为0,所有“0.9”的索引为1,所有“1.4”的索引为2。根据您的需要,您可以使数据帧无效。然后只需添加一个
.reset_index()
(例如:
df['obs'].repeat(df['count']).reset_index()
)-然而,OP似乎并不关心索引-它们更多的是在重复值之后使用的…在我看来,使用串联似乎是一种巧妙的方法。但多亏了这个建议。顺便说一下,我喜欢你个人资料照片中的忍者狗。:-)
   import numpy as np

   times = df['count'] 

   df2['obs'] = np.concatenate([np.repeat(df['obs'],times)])

   print(df2)

          obs
       0 -0.3
       1 -0.3
       2 -0.3
       3  0.9
       4  0.9
       5  1.4
       6  1.4
       7  1.4
       8  1.4
       9  1.4