2017-11-12 29 views
2

私はExcelで、次のデータがあります。パンダ、値の誤差

SCENARIO DATE POD   AREA IDOC STATUS TYPE 
AAA 02.06.2015 JKJKJKJKJKK 4210 713375 51   1 
AAA 02.06.2015 JWERWERE 4210 713375 51   1 
AAA 02.06.2015 JAFDFDFDFD 4210 713375 51   9 
BBB 02.06.2015 AAAAAAAA 5400 713504 51  43 
CCC 05.06.2015 BBBBBBBBBB 4100 756443 51  187 
AAA 05.06.2015 EEEEEEEE 4100 756457 53  228 

を、私は、次のピボット達成したい:私は次のことを試してみましたが、それはすべてのために集約

SCENARIO STATUS TYPE COUNT(TYPE) 
AAA  51  1  2 
        9  1 
      53  228 1 
BBB  51  43 1 
CCC  51  187 1 

を単一の列でも、型は浮動小数点として表示されます。つまり、次のようになります。

SCENARIO STATUS TYPE 
E01  51  1.0  23 23 23 23  23  23 23 23  2 
       4.0  89 89 89 89  89  89 89 89  8 
       13.0 21 21 21 21  21  21 21 21  2 
       20.0 57 57 57 57  57  57 57 57  5 
       29.0  5 5 5 5  5  5 5 5 

「カウント」が1つだけ表示されます。ここ、1列。 私はVEのこのコードは、試してみました:事前に

xl = pd.ExcelFile("MRD.xlsx") 
df = xl.parse("Sheet3") 
print (df.column.values) 

# The following gave ValueError: Cannot label index with a null key 
# dfi = df.pivot('SCENARIO) 

# Here i do not actually need it to count every column, just a specific one 
table = df.groupby(["SCENARIO", "STATUS", "TYPE"]).agg(['count'] 
writer = pd.ExcelWriter('pandas.out.xlsx', engine='xlsxwriter') 
table.to_excel(writer, sheet_name='Sheet1') 
writer.save() 

感謝を! をいけない場合

答えて

2

使用GroupBy.countNaN秒数える必要が[]に列を指定すると:

table = df.groupby(["SCENARIO", "STATUS", "TYPE"])['TYPE'].count() 
print (table) 
SCENARIO STATUS TYPE 
AAA  51  1  2 
        9  1 
      53  228  1 
BBB  51  43  1 
CCC  51  187  1 
Name: TYPE, dtype: int64 

あるいは、列が指定GroupBy.sizeを使用する必要はありませんが、違いは、それはまたNaN秒数:

table = df.groupby(["SCENARIO", "STATUS", "TYPE"]).size() 
print (table) 
SCENARIO STATUS TYPE 
AAA  51  1  2 
        9  1 
      53  228  1 
BBB  51  43  1 
CCC  51  187  1 
dtype: int64 

必要なカラム:MultiIndex Series

table = (df.groupby(["SCENARIO", "STATUS", "TYPE"])['TYPE'] 
      .count() 
      .reset_index(name='COUNT(TYPE)')) 
print (table) 
    SCENARIO STATUS TYPE COUNT(TYPE) 
0  AAA  51  1   2 
1  AAA  51  9   1 
2  AAA  53 228   1 
3  BBB  51 43   1 
4  CCC  51 187   1 
table = (df.groupby(["SCENARIO", "STATUS", "TYPE"]) 
      .size() 
      .reset_index(name='COUNT(TYPE)')) 

print (table) 
    SCENARIO STATUS TYPE COUNT(TYPE) 
0  AAA  51  1   2 
1  AAA  51  9   1 
2  AAA  53 228   1 
3  BBB  51 43   1 
4  CCC  51 187   1 

最終いけないexcelに、インデックスと呼ばれる最初の列を記述する必要がある場合は、次の

table.to_excel(writer, sheet_name='Sheet1', index=False) 
+0

を私はシナリオと状況/シナリオごとに小計を追加する行くことができる方法で私を助けてもらえますか? – onlyf

+0

サンプルデータと希望の出力で新しい質問を作成できますか?ありがとう。 – jezrael

+0

あなたは 'df ['new'] = df.groupby([" SCENARIO "])['COUNT(TYPE)']。transform( 'sum')'を必要としますか? – jezrael