2016-07-31 48 views
-2

我有以下的數據幀數據框中操縱和聚集

City  Status  q1 q2 Record 
0 Austin  Standard N Y Active 
1 Dallas  Standard N y Active 
2 Orlando Standard N N Active 
3 Orlando Ex   Y Y Inactive 
4 Orlando Standard N N Active 

我試圖操縱它看起來像這樣:

   Count % 
All Cities  5  100.0% 
Active   4  80% 
    Ex   1  20% 
    Standard  4  80% 
    Q1 = Y  1  20% 
    Q2 = Y  2  40% 
Inactive  1  20% 

我已經使出了一大塊的代碼,分別計算通過將每個df列分解爲其組件狀態(例如,q1yes的列,q1no的列等),然後遞歸填充數據框,但我覺得我必須缺少某些東西。

我還需要按照城市打破它,但我想尋求更多的幫助

回答

1

你能做到這樣之前推測的那部分:

In [159]: df.q1 = 'Q1 = ' + df.q1.str.upper() 

In [160]: df.q2 = 'Q2 = ' + df.q2.str.upper() 

In [161]: df 
Out[161]: 
     City Status  q1  q2 Record 
0 Austin Standard Q1 = N Q2 = Y Active 
1 Dallas Standard Q1 = N Q2 = Y Active 
2 Orlando Standard Q1 = N Q2 = N Active 
3 Orlando  Ex Q1 = Y Q2 = Y Inactive 
4 Orlando Standard Q1 = N Q2 = N Active 

In [173]: r = (df.drop('City',1) 
    .....:  .apply(lambda x: x.value_counts()) 
    .....:  .apply(lambda x: x[x.first_valid_index()], axis=1) 
    .....:  .to_frame('Count') 
    .....:  .astype(np.int16) 
    .....: ) 

In [174]: r['pct'] = (r.Count/len(df) * 100).astype(str) + '%' 

In [175]: r.loc['All Cities'] = [len(df), '100.0%'] 

In [176]: r 
Out[176]: 
      Count  pct 
Active   4 80.0% 
Ex    1 20.0% 
Inactive  1 20.0% 
Q1 = N   4 80.0% 
Q1 = Y   1 20.0% 
Q2 = N   2 40.0% 
Q2 = Y   3 60.0% 
Standard  4 80.0% 
All Cities  5 100.0% 

最後:

In [178]: r[~r.index.str.contains('= N')] 
Out[178]: 
      Count  pct 
Active   4 80.0% 
Ex    1 20.0% 
Inactive  1 20.0% 
Q1 = Y   1 20.0% 
Q2 = Y   3 60.0% 
Standard  4 80.0% 
All Cities  5 100.0%