gpt4 book ai didi

python - 采取 Pandas (python)中每隔一列的行均值

转载 作者:行者123 更新时间:2023-12-04 00:55:35 25 4
gpt4 key购买 nike

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

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 是第 1 季度。我如何遍历列名来为所有创建它我的新专栏?这似乎比显示的更具挑战性(至少对我而言!)here .感谢您的宝贵时间!

编辑:好的,这已经解决了,快速向所有做出贡献的人大声喊叫!

最佳答案

我们为 axis=1 设置了 groupby,这里使用 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

关于python - 采取 Pandas (python)中每隔一列的行均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62747617/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com