在熊猫中每隔一列取行平均值(python)

时间:2020-07-06 00:07:30

标签: python pandas dataframe

我正在尝试每隔几列取行平均值。这是一个示例数据集。

RewriteEngine on
RewriteRule ^(.*)$ current/public/$1
RewriteCond %{HTTP:X-Forwarded-Proto} !=https [OR]
RewriteCond %{HTTP_HOST} !^www\.
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+) [NC]
RewriteRule ^ https://www.%1%{REQUEST_URI} [R=301,L]

我需要在完整数据集中采用前三列的行均值,然后是接下来的三列,依此类推。我不需要新数据集中的原始列。这是我的代码。它起作用,但有一些警告(如下所述)。我正在寻找更干净,更优雅的解决方案。 (Python / Pandas的新手)

d = {'2000-01': range(0,10), '2000-02': range(10,20), '2000-03': range(10,20),
     '2001-01': range(10,20), '2001-02':range(5,15), '2001-03':range(5,15)}
pd.DataFrame(data=d)

     2000-01  2000-02  2000-03  2001-01  2001-02  2001-03
0        0       10       10       10        5        5
1        1       11       11       11        6        6
2        2       12       12       12        7        7
3        3       13       13       13        8        8
4        4       14       14       14        9        9
5        5       15       15       15       10       10
6        6       16       16       16       11       11
7        7       17       17       17       12       12
8        8       18       18       18       13       13
9        9       19       19       19       14       14

我得到以下输出,这是正确的:

#Create empty list to store row means
d1 = []

#Run loop to find row means for every three columns
for i in np.arange(0, 6, 3):
    data1 = d.iloc[:,i:i+3]
    d1.append(data1.mean(axis=1))

#Create empty list to concat DFs later
dlist1 =[]

#Concat DFs
for j in range(0,len(d1)):
    dlist1.append(pd.Series(d1[j]).to_frame())
pd.concat(dlist1, axis = 1)

可以轻松地固定列名,但是问题是我需要采用特定格式,因此实际数据集中有65个这些列。如果您会注意到原始数据集中的列名,它们就是 0 0 0 6.666667 6.666667 1 7.666667 7.666667 2 8.666667 8.666667 3 9.666667 9.666667 4 10.666667 10.666667 5 11.666667 11.666667 6 12.666667 12.666667 7 13.666667 13.666667 8 14.666667 14.666667 9 15.666667 15.666667 。 1,2和3是2000年的月份,因此新df的第1列应为'2000-01'; '2000-02'; '2000-03',q1是第1季度。如何遍历列名以为所有新列创建此列? (至少对我来说!)这似乎比oké所显示的更具挑战性。感谢您的宝贵时间!

编辑:确定,此问题已解决,对所有贡献者迅速大喊大叫!

2 个答案:

答案 0 :(得分:4)

我们有typeorm migration:[run|show|revert]代表public class Program { public static async Task Main(string[] args) { var builder = WebAssemblyHostBuilder.CreateDefault(args); builder.RootComponents.Add<App>("app"); // Error there : The type or namespace name 'App' could not be found (are you missing a using directive or an assembly reference?) builder.Services.AddTransient(sp => new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) }); await builder.Build().RunAsync(); } } ,这里使用groupby数组得到除数

axis=1

更常见的方式

numpy

答案 1 :(得分:2)

使用3的倍数和concat的所有序列进行迭代:

df = (pd.concat([df.iloc[:, i:i+3].mean(1).rename(df.columns[i].split('-')[0]+'q1') 
      for i in range(0, df.shape[1], 3)], axis=1))

print(df)
      2000q1     2001q1
0   6.666667   6.666667
1   7.666667   7.666667
2   8.666667   8.666667
3   9.666667   9.666667
4  10.666667  10.666667
5  11.666667  11.666667
6  12.666667  12.666667
7  13.666667  13.666667
8  14.666667  14.666667
9  15.666667  15.666667