Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:表示新列中每n行重复n次_Python_Pandas_Mean_Repeat - Fatal编程技术网

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

Python:表示新列中每n行重复n次,python,pandas,mean,repeat,Python,Pandas,Mean,Repeat,我想每隔三行取列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]

我想每隔三行取列
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)
结果应为带有[2,2,2,4,4,4]的列
c3
。有比这5行代码更简单的方法吗?

使用按索引整除或按数据帧长度辅助数组:

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