我有这个数据帧,包含73行:
Date Col1 Col2 Col3
1975 float float float
1976 float float float
1976 float float float
1977 float float float
1978 float float float
....
....
有些年份出现两次,因为这一年的价值是两次。我想要做的是合并年份相同的行,获取特定两行的每列的平均值。事实是我仍然熟悉大熊猫,我并不真正理解loc和iloc选择器的用法。这是我尝试过的,但我确信这是完全错误的,非pythonic:
for i in range(72):
if df.Date[i]==df.Date[i+1]:
df.Very_satisfied[i]= (df.Very_satisfied[i]+df.Very_satisfied[i+1])/2
df.Fairly_satisfied[i]= (df.Fairly_satisfied[i]+df.Fairly_satisfied[i+1])/2
df.NV_satisfied[i]= (df.NV_satisfied[i]+ df.NV_satisfied[i+1])/2
df.Not_satisfied[i]= (df.Not_satisfied[i]+ df.Not_satisfied[i+1])/2
df.DK[i]= (df.DK[i]+ df.DK[i+1])/2
a=i+1
str(a)
df.drop(a)
其中“非常满意”,“相当满意”的ecc。是列。我的代码中的要点是:如果两年相同,则计算每个值的平均值,将其替换为第一行并删除第二行。 我真的需要更聪明,更优雅的东西。
答案 0 :(得分:1)
您可以使用groupby()
然后使用mean()
。这是一个例子:
import pandas as pd
import numpy as np
df = pd.DataFrame({'date': list(range(25)) * 2, 'col1': np.random.random(50) * 100, 'col2': np.random.random(50)})
df.groupby('date').mean()
这将获取相同日期的所有行,计算每列中所有行的平均值。
我的样本输出:
df.groupby('date').mean().head()
col1 col2
date
0 42.881950 0.436073
1 32.114299 0.309742
2 96.819446 0.809071
3 30.606661 0.284257
4 40.690211 0.624972
对于此输入:
df[df['date'] < 5]
date col1 col2
0 0 67.268605 0.393560
1 1 55.864578 0.508636
2 2 97.735942 0.861162
3 3 58.014599 0.117055
4 4 7.429489 0.637101
25 0 18.495296 0.478585
26 1 8.364020 0.110848
27 2 95.902950 0.756980
28 3 3.198724 0.451460
29 4 73.950932 0.612843