我想每三行取列的平均值c2,并將結果保存在新列中c3,以便每個平均值重復三次。這段代碼可以完成這個工作:import pandas as pddf = pd.DataFrame({'c1': ['A', 'B','C','D','E','F'], 'c2': [1, 2, 3,3,4,5]})nrow=3temp=df['c2'].rolling(nrow).mean() #Take rolling meantemp= temp[nrow-1::nrow] #Select mean value every 3 rowstemp=temp.loc[temp.index.repeat(nrow)] #Repeat each mean value 3 timestemp.index = range(0,len(df)) #Fix index df['c3']=tempprint(df)結果應c3為 [2,2,2,4,4,4] 列。還有比這5行代碼更簡單的方法嗎?
1 回答

胡子哥哥
TA貢獻1825條經驗 獲得超6個贊
GroupBy.transform
與按索引或輔助數組的長度除以整數一起使用DataFrame
:
nrow = 3
#if default RangeIndex
df['c3'] = df.groupby(df.index // nrow)['c2'].transform('mean')
#alternative if not default RangeIndex
#df['c3'] = df.groupby(np.arange(df) // nrow)['c2'].transform('mean')
print(df)
? c1? c2? c3
0? A? ?1? ?2
1? B? ?2? ?2
2? C? ?3? ?2
3? D? ?3? ?4
4? E? ?4? ?4
5? F? ?5? ?4
添加回答
舉報
0/150
提交
取消