2017-10-27 5 views
2

を使用してデータセットをUnsummarizing。私が持っていたは以下に要約データセットを考えるとPythonの

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

一つの考えがまとめたセットを反復処理し、NumberOfObservationsにより(リストオブジェクトなど)の値を乗算することでした。このようなもの:

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

しかし、私はこれを行う簡単な方法があるのだろうかと思っています。

答えて

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

私は非常に私は非常に答えて正確です。 – Dark

+0

素晴らしい作品 - ありがとう! 3分と私は受け入れることができます。 – Sevyns

+0

@jezrael、['Series.repeat()'](https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.repeat.html)の正しい使い方は何ですか? OPがデータフレーム形式でこの答えを求めていた場合は? – MattR

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