查找连续列数据的平均值

时间:2019-02-12 19:57:40

标签: python pandas dataframe

我有以下数据: (此处提供的数据仅是代表性数据)

enter image description here`

我要对这些数据执行以下操作:

  1. 我只想在201之后获得列 即我想删除200-1至200-4列数据。 一种方法是在从excel读取数据时仅检索所需的列,但我想知道如何根据特定模式过滤列名称,因为200-1至200-4列名称具有模式200-*

  2. 我想在202-4之后创建一列,该列以下列方式存储值:

  3. 201q1 =(201-1和201-2)的平均值

  4. 201q2 =(201-3和201-4)的平均值

类似地,如果将有202-1至201-4数据存在,则应该形成类似的列。

请帮助。

预先感谢您的支持。

2 个答案:

答案 0 :(得分:0)

这是一个粗略的例子,但它会让您接近。该示例假定每个组始终有四列:

#sample data
np.random.seed(1)
df = pd.DataFrame(np.random.randn(2,12), columns=['200-1','200-2','200-3','200-4', '201-1', '201-2', '201-3','201-4', '202-1', '202-2', '202-3','202-4'])

# remove 200-* columns
df2 = df[df.columns[~df.columns.str.contains('200-')]]

# us np.arange to create groups
new = df2.groupby(np.arange(len(df2.columns))//2, axis=1).mean()

# rename columns
new.columns = [f'{v}{k}' for v,k in zip([x[:3] for x in df2.columns[::2]], ['q1','q2']*int(len(df2.columns[::2])/2))]

# join
df2.join(new)

      201-1     201-2     201-3     201-4     202-1     202-2     202-3  \
0  0.865408 -2.301539  1.744812 -0.761207  0.319039 -0.249370  1.462108   
1 -0.172428 -0.877858  0.042214  0.582815 -1.100619  1.144724  0.901591   

      202-4     201q1     201q2     202q1     202q2  
0 -2.060141 -0.718066  0.491802  0.034834 -0.299016  
1  0.502494 -0.525143  0.312514  0.022052  0.702043 

答案 1 :(得分:0)

对于第1步,您可以使用列表理解和熊猫放置功能:

dropcols = [x for x in df.columns if '200-' in x]
df.drop(dropcols, axis=1, inplace=True) 

第3步和第4步相似,您可以计算列的滚动平均值:

df2 = df.rolling(2, axis = 1).mean() # creates rolling mean
df2.columns = [x.replace('-', 'q') for x in df2.columns] # renames the columns
dfans = pd.concat([df, df2], axis = 1) # concatenate the columns together

现在,您只需要删除不需要的列并将其重命名。