如何计算Python数据框中特定行的平均值?

问题描述 投票:0回答:3

我有一个包含 11 000k 行的数据框。有多个列,但我只对其中的两列感兴趣:名称和值。一个名称可以在行中重复多次。我想计算每个名称的平均值,并使用每个名称的平均值创建一个新的数据框。我真的不知道如何遍历行以及如何计算平均值。任何帮助将不胜感激。谢谢!

Name     DataType    TimeStamp           Value Quality
Food   Float       2019-01-01 13:00:00  105.75      122
Food    Float      2019-01-01 17:30:00  11.8110352  122
Food   Float       2019-01-01 17:45:00  12.7932892      122
Water       Float      2019-01-01 14:01:00  16446.875   122
Water       Float      2019-01-01 14:00:00  146.875     122

RangeIndex: 11140487 entries, 0 to 11140486
Data columns (total 6 columns):
Name              object
Value        object

这就是我所拥有的,我知道这真的很菜鸟,但我很难穿过行。

for i in range(0, len(df):
if((df.iloc[i]['DataType']!='Undefined')):
    print df.loc[df['Name'] == df.iloc[i]['Name'], df.iloc[i]['Value']].mean()
  
   
python pandas dataframe mean
3个回答
3
投票

您无需浏览各行,只需选取符合您条件的所有字段即可

d = {'col1': [1,2,1,2,1,2], 'col2': [3, 4,5,6,7,8]}
df = pd.DataFrame(data=d)

#iterate over all unique entries in col1
for entry in  df["col1"].unique():
    # get all the col2 values where col1 is the current iter of col1 entries
    meanofcurrententry=df[df["col1"]==entry]["col2"].mean()
    print(meanofcurrententry)

这不是一个完整的解决方案,但我认为它更有助于理解必要的逻辑。您仍然需要将其包装到您自己的数据框中,但是它希望有助于理解如何使用索引


2
投票

听起来

groupby()
功能正是您想要的。您定义组所在的列,然后可以获取每个组的
mean()
。文档中的示例:

df = pd.DataFrame({'A': [1, 1, 2, 1, 2],
                   'B': [np.nan, 2, 3, 4, 5],
                   'C': [1, 2, 1, 1, 2]}, columns=['A', 'B', 'C'])

df.groupby('A').mean()

输出:

     B         C
A
1  3.0  1.333333
2  4.0  1.500000

在你的情况下,它会是这样的:

df.groupby('TagName')['Samples_value'].mean()

编辑:因此,我将代码应用到您提供的输入数据帧,以下是输出:

TagName
Steam        1.081447e+06
Utilities    3.536931e+05
Name: Sample_value, dtype: float64

这是您要找的吗?


1
投票

您应该尽可能避免迭代数据框中的行,因为它非常低效......

当您想要将相同的处理应用于由一列或多列中的值标识的各个行的“组”时,可以使用“

groupby
”。这里你想要的是(*): df.groupby('TagName')['Sample_value'].mean().reset_index()

它给出了预期的结果:

TagName Sample_value 0 Steam 1.081447e+06 1 Utilities 3.536931e+05

魔语详情:

    groupby
  • :标识用于对行进行分组的列(相同值)
  • ['Sample_values']
  • :将 groupby 对象限制到感兴趣的列
  • mean()
  • :计算每组的平均值
  • reset_index()
  • :默认情况下,分组列进入索引,这对于均值操作来说很好。
    reset_index
    使它们恢复正常列
    
        
© www.soinside.com 2019 - 2024. All rights reserved.