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

桑卡普·夏尔马:

我正在尝试每隔几列使用行平均值。这是一个样本数据集。

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

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

#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)

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

          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

列名很容易固定,但是问题是我需要使用特定格式的列,并且实际数据集中有65列。如果您会注意到原始数据集中的列名,则为'2000-01'; '2000-02'; '2000-03'1,2和3是2000年的月份,因此新df的列1应该是'2000q1',q1是四分之一。如何遍历列名称以为所有新列创建此名称?(至少对我来说!)这比这里显示的要困难得多谢谢你的时间!

编辑:好的,这已经解决了,对所有贡献者迅速大喊大叫!

YOBEN_S:

我们有groupbyfor axis=1,这里使用numpy数组获取除数

df=df.groupby(np.arange(df.shape[1])//3,axis=1).mean()
           0          1
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

#np.arange(df.shape[1])//3
#array([0, 0, 0, 1, 1, 1])

更常见的方式

df.columns=pd.to_datetime(df.columns,format='%Y-%m').to_period('Q')
df=df.groupby(level=0,axis=1).mean()
      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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何计算在熊猫中另一列上分组的平均值

Python-计算CSV文件中每一列的平均值

SQL-根据选择行之间另一列的平均值获取列值

pandas:计算一列中每一行的numpy数组的平均值

用Python用该列的平均值减去数据框中的每一列

根据R中另一列的日期范围查找一列的平均值

熊猫数据框:按两列分组,然后对另一列取平均值

计算文件中每一列的平均值

一列中的值的平均值,另一列中的唯一值

如何在熊猫中获取使用另一列值选择的行的平均值

在熊猫中,如何根据另一列的平均值创建具有等级的新列

熊猫按另一列的平均值对一列的值进行排序

如何从datatimestamp列中每5分钟取数据帧中一列的平均值?

如何在python中通过另一列的条件过滤时取一列的平均值

如何旋转并获取每一列的平均值到行

Python如何从单个列中计算多个平均值,并根据另一列中的值选择要平均的行

熊猫计算加权滚动平均值并将其应用于另一列

减去按一列分组的列的平均值

取一列中相加的数字的平均值

pandas当另一列与python中的值匹配时,只获取一列的平均值(浮动)值

在第一列相同的所有行中找到Pandas,Python中的最小值,最大值,平均值

如何基于python(pandas,jupyter)中的另一列值获取一列的平均值

根据熊猫中的另一列计算一列的平均值

如何基于Julia中一列中的值查找数据框的行的平均值?

熊猫分组多个列根据条件取另一列的平均值

熊猫-使用另一列的降N行获得一列的平均值

将一列中具有相同值的行合并,然后找到这些行的平均值

根据上方和下方各行的平均值填充一列中的缺失行

在熊猫中以均值取一列,然后以另一列取平均值