2013-03-18 99 views
3

我有一個數據幀像這樣:的Python - 熊貓 - 據幀減少行

ind col1 col2 
1 12 string1 ... 
2 23 string2 ... 
3 34 string1 ... 
4 13 string2 ... 
5 17 string3 ... 
... ... ...  ... 

我要崩潰的數據幀,這樣COL2將是獨一無二的。在col1(和所有其他數字列)中,我想將col2相等的所有值的中位數。

我知道我可以提取df [df [「col2」] ==「stringN」],計算中位數並構建一個新的DataFrame,但有沒有更優雅/ pythonic的方式來做到這一點?

回答

4

您可以使用groupby收集由col2行,然後.median()

>>> df 
    ind col1  col2 
0 1 12 string1 
1 2 23 string2 
2 3 34 string1 
3 4 13 string2 
4 5 17 string3 
>>> df.groupby("col2") 
<pandas.core.groupby.DataFrameGroupBy object at 0x9f41b8c> 
>>> df.groupby("col2").median() 
     ind col1 
col2    
string1 2 23 
string2 3 18 
string3 5 17 
>>> df.groupby("col2").median().reset_index() 
     col2 ind col1 
0 string1 2 23 
1 string2 3 18 
2 string3 5 17 

注意,結果有ind值中位數爲好。另請參閱.mean().min(),.max(),或者如果您願意,也可以自己推出。