2016-04-19 9 views
0

の再編成:は、私はこのようになりますPythonのパンダのデータフレーム内のいくつかのデータを持っているパンダDATAFRAME

ここ
  Sample Signal 
225 TGBb_0m-2 1.943295 
226 TGBb_5m-2 4.659431 
227 TGBb_15m-2 1.713407 
228 TGBb_30m-2 2.524867 
229 TGBb_45m-2 2.776531 
230 TGBb_90m-2 2.196248 
231 TGBb_0m-1 2.329916 
232 TGBb_5m-1 1.916303 
233 TGBb_15m-1 3.892828 
234 TGBb_30m-1 2.380105 
235 TGBb_45m-1 2.667500 
236 TGBb_90m-1 2.377786 
237 TGBb_0m-3 1.836953 
238 TGBb_15m-3 2.208754 
239 TGBb_30m-3 1.561843 
240 TGBb_45m-3 2.613384 
241 TGBb_90m-3 2.081838 

私が唯一5. Iを持って反復3を除く6時間点で3つの反復実験、それぞれを持っていますこのデータフレームの順序を変更して、実験的にではなく時間的にグループ化したいと考えています。私は、これを行う最善の方法は、大きなデータフレームを単一の時点のすべてのデータで構成されるより小さなデータフレームに分割することだと考えています。私はこれをどのように達成できるのか誰も知っていますか?例えば

、所望の出力は次のようになります。私はあなたがdataframe.group_byコマンドでこの目標を達成することができると思い

  Sample Signal 
225 TGBb_0m-2 1.943295 
231 TGBb_0m-1 2.329916 
237 TGBb_0m-3 1.836953 


     Sample Signal 
226 TGBb_5m-2 4.659431 
232 TGBb_5m-1 1.916303 #missing third data point 


227 TGBb_15m-2 1.713407 
227 TGBb_15m-2 1.713407 
238 TGBb_15m-3 2.208754 

答えて

1

あなたのデータ:

df = pd.DataFrame({'Sample': {225: 'TGBb_0m-2', 
      226: 'TGBb_5m-2', 
      227: 'TGBb_15m-2', 
      228: 'TGBb_30m-2', 
      229: 'TGBb_45m-2', 
      230: 'TGBb_90m-2', 
      231: 'TGBb_0m-1', 
      232: 'TGBb_5m-1', 
      233: 'TGBb_15m-1', 
      234: 'TGBb_30m-1', 
      235: 'TGBb_45m-1', 
      236: 'TGBb_90m-1', 
      237: 'TGBb_0m-3', 
      238: 'TGBb_15m-3', 
      239: 'TGBb_30m-3', 
      240: 'TGBb_45m-3', 
      241: 'TGBb_90m-3'}, 
'Signal': {225: 1.943295, 
      226: 4.659431, 
      227: 1.713407, 
      228: 2.524867, 
      229: 2.7765310000000003, 
      230: 2.1962479999999998, 
      231: 2.329916, 
      232: 1.9163029999999999, 
      233: 3.8928279999999997, 
      234: 2.380105, 
      235: 2.6675, 
      236: 2.377786, 
      237: 1.8369529999999998, 
      238: 2.208754, 
      239: 1.561843, 
      240: 2.613384, 
      241: 2.0818380000000003}}, 
      columns=['Sample', 'Signal']) 

を使用すると、一部でグループに必要なので、あなただけ入力し、それを印刷したいのであれば、それはあなたが使用haveto、名前は動作しませんですSample列内のテキストを、私はこのようなstr.extractを使用する場合があります。

df[['Time', 'Experiment']] = df['Sample'].str.extract(r'(.+)-(\d+)') 

あなたは「時点」は同じデータフレームに対して操作を実行したい場合は、私は01を使用したいですループをフィルタして最初のdfを入力します。ここで、時刻は固有の期間の1つに相当します。あなたの目標は、単に時間でデータフレームの順序を変更し、実験により、上記のstr.extractを使用した後、あなただけ取得するdf.sort_values('Time')[['Sample', 'Signal']]を使用する必要がないのであれば

 Sample Signal 
225 TGBb_0m-2 1.943295 
231 TGBb_0m-1 2.329916 
237 TGBb_0m-3 1.836953 
     Sample Signal 
226 TGBb_5m-2 4.659431 
232 TGBb_5m-1 1.916303 
     Sample Signal 
227 TGBb_15m-2 1.713407 
233 TGBb_15m-1 3.892828 
238 TGBb_15m-3 2.208754 
     Sample Signal 
228 TGBb_30m-2 2.524867 
234 TGBb_30m-1 2.380105 
239 TGBb_30m-3 1.561843 
     Sample Signal 
229 TGBb_45m-2 2.776531 
235 TGBb_45m-1 2.667500 
240 TGBb_45m-3 2.613384 
     Sample Signal 
230 TGBb_90m-2 2.196248 
236 TGBb_90m-1 2.377786 
241 TGBb_90m-3 2.081838 

for time_period in df['Time'].unique(): 
    df_group = df[df['Time'] == time_period][['Sample', 'Signal']] 
    print(df_group) 

は、次の結果を生成します次の結果:

  Sample Signal 
231 TGBb_0m-1 2.329916 
237 TGBb_0m-3 1.836953 
225 TGBb_0m-2 1.943295 
233 TGBb_15m-1 3.892828 
227 TGBb_15m-2 1.713407 
238 TGBb_15m-3 2.208754 
228 TGBb_30m-2 2.524867 
234 TGBb_30m-1 2.380105 
239 TGBb_30m-3 1.561843 
229 TGBb_45m-2 2.776531 
235 TGBb_45m-1 2.667500 
240 TGBb_45m-3 2.613384 
226 TGBb_5m-2 4.659431 
232 TGBb_5m-1 1.916303 
236 TGBb_90m-1 2.377786 
230 TGBb_90m-2 2.196248 
241 TGBb_90m-3 2.081838 
+0

ありがとうございます! – CiaranWelsh

1

。それにもかかわらず、実験の時点と数を分割するために列をわずかに変更する必要があるかもしれません(例えば、 'TGBb_0m-2'は 'Sample'列の 'TGBb_0m'と 'your_new_column'列の '2'

df = df.groupby(['Sample'],as_index = False) 

このように、groupbyデータフレームである特定の種類のデータフレームを作成することに注意してください。 (再現性の目的のために)

df.head() 
関連する問題