Python Pandas:表示新列中的每 n 行重复 n 次

我想每三行取列的平均值c2,并将结果保存在新列中c3,以便每个平均值重复三次。这段代码可以完成这个工作:


import pandas as pd

df = pd.DataFrame({'c1': ['A', 'B','C','D','E','F'], 'c2': [1, 2, 3,3,4,5]})

nrow=3

temp=df['c2'].rolling(nrow).mean()      #Take rolling mean

temp= temp[nrow-1::nrow]                #Select mean value every 3 rows

temp=temp.loc[temp.index.repeat(nrow)]  #Repeat each mean value 3 times

temp.index = range(0,len(df))           #Fix index 

df['c3']=temp

print(df)

结果应c3为 [2,2,2,4,4,4] 列。还有比这5行代码更简单的方法吗?


元芳怎么了
浏览 109回答 1
1回答

胡子哥哥

GroupBy.transform与按索引或辅助数组的长度除以整数一起使用DataFrame:nrow = 3#if default RangeIndexdf['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  c30  A   1   21  B   2   22  C   3   23  D   3   44  E   4   45  F   5   4
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python