2017-05-15 1 views
1

Ich habe folgenden Datenrahmen:Wie ein gruppierte Ergebnis in einen Datenrahmen konvertieren

import pandas as pd 
import numpy as np 
df = pd.DataFrame({ 
       'category': ['ctr','ctr','ctr','ctr','ctr','ctr'], 
       'expected_count': [100,100,112,1.3,14,125], 
       'sample_id': ['S1','S1','S1','S2','S2','S2'], 
       'gene_symbol': ['a', 'b', 'c', 'a', 'b', 'c'], 
       }) 

Welcher dies erzeugt:

In [2]: df 
Out[2]: 
    category expected_count gene_symbol sample_id 
0  ctr   100.0   a  S1 
1  ctr   100.0   b  S1 
2  ctr   112.0   c  S1 
3  ctr    1.3   a  S2 
4  ctr   14.0   b  S2 
5  ctr   125.0   c  S2 

ich mit Gen-Symbol habe kein Problem Gruppierung es:

In [4]: gdf = df.groupby(by = 'gene_symbol')['expected_count'].mean() 
    ...: gdf 
    ...: 
Out[4]: 
gene_symbol 
a  50.65 
b  57.00 
c 118.50 
Name: expected_count, dtype: float64 

In [5]: str(gdf) 
Out[5]: 'gene_symbol\na  50.65\nb  57.00\nc 118.50\nName: expected_count, dtype: float64' 

Beachten Sie, dass die gdf eine Zeichenfolge ist. Wie kann ich es in Datenrahmen umwandeln?

Antwort

1

Need as_index=False oder reset_index:

gdf = df.groupby('gene_symbol', as_index=False)['expected_count'].mean() 
print (gdf) 
    gene_symbol expected_count 
0   a   50.65 
1   b   57.00 
2   c   118.50 

Oder:

gdf = df.groupby('gene_symbol')['expected_count'].mean().reset_index() 
print (gdf) 
    gene_symbol expected_count 
0   a   50.65 
1   b   57.00 
2   c   118.50 

Ausgang ist nicht string, aber Series:

print (type(df.groupby('gene_symbol')['expected_count'].mean())) 
<class 'pandas.core.series.Series'> 
1

Sie verwenden können:

gdf = df.groupby(by = 'gene_symbol')['expected_count'].mean().to_frame() 

gdf 
Out[149]: 
      expected_count 
gene_symbol     
a      50.65 
b      57.00 
c     118.50 
Verwandte Themen