给出以下汇总数据集:
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)
但是,我想知道是否有更简单的方法可以做到这一点。
答案 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