使用Python取消对数据集的错误

时间:2017-10-27 13:39:17

标签: python pandas

给出以下汇总数据集:

import pandas as pd
summarized_set = pd.DataFrame({'Value':[1,2,3],
                           'NumberOfObservations':[3,3,3]})

我正在寻找一种方法将汇总值(观察次数)转换回实际观察值。

observed_values = pd.DataFrame({'Value':[1,1,1,2,2,2,3,3,3]})

我想到的是迭代汇总集并将值(作为列表对象)乘以NumberOfObservations。像这样:

z = []
z = z + ([1] * 3) + ([2] * 3) + ([3] * 3)

但是,我想知道是否有更简单的方法可以做到这一点。

2 个答案:

答案 0 :(得分:6)

使用numpy.repeat

z = np.repeat(summarized_set['Value'],summarized_set['NumberOfObservations']).values.tolist()
print (z)
[1, 1, 1, 2, 2, 2, 3, 3, 3]

答案 1 :(得分:1)

您可以使用以下列表推导来构建这样的列表:

[v
 for v,n in zip(summarized_set['Value'],summarized_set['NumberOfObservations'])
 for _ in range(n)]

所以我们可以用以下方法构建这样的数据框:

observed_values = pd.DataFrame({'Value':
    [v
     for v,n in zip(summarized_set['Value'],summarized_set['NumberOfObservations'])
     for _ in range(n)] })

然后产生:

>>> pd.DataFrame({'Value':
...     [v
...      for v,n in zip(summarized_set['Value'],summarized_set['NumberOfObservations'])
...      for _ in range(n)] })
   Value
0      1
1      1
2      1
3      2
4      2
5      2
6      3
7      3
8      3
相关问题