2017-08-16 80 views
2

我有一個df與訂單id和渠道。熊貓groupby和計數百分比,同時保持NaNs

all_data_filtered = all_data[["order_id", "user_channel"]] 
all_data_filtered.head(100).to_dict() 

給出了這樣的字典有人能夠與pd.DataFrame(dict_bellow)輕鬆地複製它:

{'order_id': {0: nan, 
    1: nan, 
    2: nan, 
    3: nan, 
    4: nan, 
    5: nan, 
    6: nan, 
    7: nan, 
    8: nan, 
    9: nan, 
    10: nan, 
    11: nan, 
    12: nan, 
    13: 7026578.0, 
    14: 7026584.0, 
    15: 7026890.0, 
    16: 7026959.0, 
    17: 7027028.0, 
    18: 7027109.0, 
    19: 7027175.0, 
    20: 7027193.0, 
    21: nan, 
    22: nan, 
    23: nan, 
    24: nan, 
    25: nan, 
    26: nan, 
    27: nan, 
    28: nan, 
    29: nan, 
    30: nan, 
    31: 7026635.0, 
    32: 7026842.0, 
    33: nan, 
    34: nan, 
    35: nan, 
    36: nan, 
    37: nan, 
    38: nan, 
    39: nan, 
    40: nan, 
    41: nan, 
    42: nan, 
    43: nan, 
    44: nan, 
    45: 7026923.0, 
    46: nan, 
    47: nan, 
    48: nan, 
    49: nan, 
    50: nan, 
    51: nan, 
    52: nan, 
    53: nan, 
    54: nan, 
    55: nan, 
    56: 7026662.0, 
    57: 7026677.0, 
    58: nan, 
    59: nan, 
    60: 7722035.0, 
    61: nan, 
    62: 7026686.0, 
    63: 7026695.0, 
    64: nan, 
    65: 7028045.0, 
    66: 7026698.0, 
    67: 7026701.0, 
    68: 7026740.0, 
    69: 7026743.0, 
    70: 7033025.0, 
    71: nan, 
    72: nan, 
    73: nan, 
    74: nan, 
    75: 7584236.0, 
    76: 7584395.0, 
    77: nan, 
    78: nan, 
    79: nan, 
    80: nan, 
    81: nan, 
    82: nan, 
    83: nan, 
    84: nan, 
    85: 7026761.0, 
    86: 7027055.0, 
    87: 7026755.0, 
    88: 7026758.0, 
    89: 7027709.0, 
    90: nan, 
    91: nan, 
    92: nan, 
    93: nan, 
    94: nan, 
    95: 7026764.0, 
    96: 7026824.0, 
    97: 7033052.0, 
    98: 7033112.0, 
    99: 7033349.0}, 
'user_channel': {0: 1, 
    1: 2, 
    2: 3, 
    3: 1, 
    4: 3, 
    5: 3, 
    6: 1, 
    7: 3, 
    8: 4, 
    9: 1, 
    10: 4, 
    11: 2, 
    12: 3, 
    13: 3, 
    14: 3, 
    15: 3, 
    16: 3, 
    17: 3, 
    18: 3, 
    19: 3, 
    20: 3, 
    21: 3, 
    22: 1, 
    23: 1, 
    24: 3, 
    25: 1, 
    26: 1, 
    27: 1, 
    28: 1, 
    29: 3, 
    30: 1, 
    31: 3, 
    32: 3, 
    33: 3, 
    34: 1, 
    35: 3, 
    36: 3, 
    37: 2, 
    38: 2, 
    39: 3, 
    40: 3, 
    41: 1, 
    42: 1, 
    43: 2, 
    44: 5, 
    45: 5, 
    46: 3, 
    47: 2, 
    48: 3, 
    49: 3, 
    50: 3, 
    51: 1, 
    52: 1, 
    53: 3, 
    54: 3, 
    55: 3, 
    56: 3, 
    57: 3, 
    58: 1, 
    59: 1, 
    60: 6, 
    61: 3, 
    62: 3, 
    63: 3, 
    64: 3, 
    65: 3, 
    66: 4, 
    67: 4, 
    68: 4, 
    69: 4, 
    70: 4, 
    71: 3, 
    72: 3, 
    73: 1, 
    74: 1, 
    75: 3, 
    76: 3, 
    77: 3, 
    78: 3, 
    79: 3, 
    80: 1, 
    81: 3, 
    82: 3, 
    83: 4, 
    84: 3, 
    85: 3, 
    86: 3, 
    87: 4, 
    88: 4, 
    89: 4, 
    90: 1, 
    91: 3, 
    92: 3, 
    93: 5, 
    94: 3, 
    95: 3, 
    96: 3, 
    97: 3, 
    98: 3, 
    99: 3}} 

這些都是個人的訂單。所以,我想將它們分組並計數:

all_data_filtered.groupby(["user_channel"]).agg(['count']) 

這給這個因爲我知道通過通道3附帶的大部分訂單是有用的:

   order_id 
       count 
user_channel  
1 391 
2 211 
3 1805 
4 425 
5 102 
6 124 
7 159 

但這些排除來所有NaN(用戶通過頻道並沒有提交訂單)。因此,最終我可以獲得一些百分比:通過第3頻道,90%的用戶和10%的用戶下了一個訂單,這使得所有訂單的40%。如何納入NaN以便我可以計算百分比?

回答

3

嘗試使用.agg('size')。

df.groupby('user_channel').agg('size') 

user_channel 
1 22 
2  6 
3 57 
4 11 
5  3 
6  1 
dtype: int64 

對戰

df.groupby('user_channel').agg('count') 
      order_id 

user_channel   
1     0 
2     0 
3     24 
4     8 
5     1 
6     1 
+1

短'df.groupby( 'user_channel')。大小()' – piRSquared