2017-08-06 90 views
0

我有這樣的數據幀,由73行:合併在大熊貓的某些行數據幀

Date Col1 Col2 Col3 
1975 float float float 
1976 float float float 
1976 float float float 
1977 float float float 
1978 float float float 
.... 
.... 

有兩次出現,因爲值當年分兩次服用某些年份。我想要做的是合併年份相同的那些行,對這些特定的兩行取每列的平均值。事實是,我仍然熟悉熊貓,我並不真正瞭解loc和iloc選擇器的用法。這是我已經盡力了,但我相信這是完全錯誤的,不符合Python:

for i in range(72): 
    if df.Date[i]==df.Date[i+1]: 
     df.Very_satisfied[i]= (df.Very_satisfied[i]+df.Very_satisfied[i+1])/2 
     df.Fairly_satisfied[i]= (df.Fairly_satisfied[i]+df.Fairly_satisfied[i+1])/2 
     df.NV_satisfied[i]= (df.NV_satisfied[i]+ df.NV_satisfied[i+1])/2 
     df.Not_satisfied[i]= (df.Not_satisfied[i]+ df.Not_satisfied[i+1])/2 
     df.DK[i]= (df.DK[i]+ df.DK[i+1])/2 
     a=i+1 
     str(a) 
     df.drop(a) 

,其中「非常滿意」,「比較滿意」的ECC。是列。我的代碼中的一點是:如果兩年是相同的計算每個值的平均值,請將其替換爲第一行並刪除第二行。 我真的需要更聰明更優雅的東西。

回答

1

您可以使用groupby(),然後使用mean()。下面是一個例子:

import pandas as pd 
import numpy as np 

df = pd.DataFrame({'date': list(range(25)) * 2, 'col1': np.random.random(50) * 100, 'col2': np.random.random(50)}) 
df.groupby('date').mean() 

這將需要的相同的日期,計算組爲每列中的所有行的平均值的所有行。

在我的樣本此輸出:

df.groupby('date').mean().head() 
      col1  col2 
date 
0  42.881950 0.436073 
1  32.114299 0.309742 
2  96.819446 0.809071 
3  30.606661 0.284257 
4  40.690211 0.624972 

此輸入:

df[df['date'] < 5] 

    date  col1  col2 
0  0 67.268605 0.393560 
1  1 55.864578 0.508636 
2  2 97.735942 0.861162 
3  3 58.014599 0.117055 
4  4 7.429489 0.637101 
25  0 18.495296 0.478585 
26  1 8.364020 0.110848 
27  2 95.902950 0.756980 
28  3 3.198724 0.451460 
29  4 73.950932 0.612843 
+0

我永遠不會了解......你平時使用python的時候從來不需要的代碼超過兩行。非常感謝您的幫助伴侶。 – sato