【问题标题】:Use aggregate computations to obtain mean and std between two dataframes使用聚合计算来获得两个数据帧之间的均值和标准差
【发布时间】:2021-06-11 17:01:52
【问题描述】:

我有两个数据框:df1 和 df2。我想使用聚合来获取两个数据帧中 s_values 之间的 mean 和 std,并将这些结果放入一个名为 new_df 的新数据帧中

在df1 =

         statistics  s_values
year
1999  cigarette use       100
1999  cellphone use       310
1999   internet use       101
1999    alcohol use       100
1999       soda use       215

在df 2 =

         statistics  s_values
year
1999  cigarette use       156
1999  cellphone use       198
1999   internet use       232
1999    alcohol use       243
1999       soda use       534

我试图得到的结果看起来像这样。 所需的输出new_df =

         statistics  difference  mean  std
year
1999  cigarette use     56        ..    ..
1999  cellphone use    112        ..    ..
1999   internet use     78        ..    ..
1999    alcohol use    143        ..    ..
1999       soda use    319        ..    ..

我已经设法使用代码构建了一个数据框,其中的列具有不同的值

new_df = df1.assign(Value=(df1['s_values'] - df2['s_values].abs())
new_df.rename(columns={'s_values':'difference'}, inplace=True)

这给了我这个输出,但我不知道如何为聚合平均值和标准添加列

         statistics  difference  
year
1999  cigarette use     56  
1999  cellphone use    112
1999   internet use     78 
1999    alcohol use    143 
1999       soda use    319

非常感谢任何帮助

【问题讨论】:

  • 所以当你说平均值或标准差时,它是针对每个统计值的。对吗?
  • 均值和标准都是一个数字,您是否想要一列在整个列中包含一个值?你可以只调用 df[col].std() 和 df[col].mean() 来获取这些值......但我不明白你为什么想要一整列?
  • 是的,我正在为每个统计信息在整个列中寻找一个数字。例如一种用于香烟的标准,一种用于手机的标准等。希望这是有道理的,很抱歉造成混乱
  • 这就是我问的,你说的,这不是你想要的?您能否提供一个示例输出,以便更容易理解您想要什么?

标签: python pandas aggregates


【解决方案1】:

如果我的理解正确,你想加入两个数据框并计算平均值和标准差

你可以试试这个吗?

df = df1.merge(df2, on= ['Year', 'statistics'])
df['mean']=df[['difference_x', 'difference_y']].mean(axis=1)
df['std'] = df[['difference_x', 'difference_y']].std(axis=1)

如果您想要 cmets 中提到的 groupby 解决方案,您也可以试试这个

pd.concat([df1[['difference']], df2[['difference']]]).groupby(level=0).std()

pd.concat([df1[['difference']], df2[['difference']]]).groupby(level=0).mean()

【讨论】:

  • 我收到 KeyError:“[Index(['difference_x', 'difference_y'], dtype='object')] 都在 [columns] 中”
  • 合并后请检查列名,并将其用于均值和标准差计算。您可以尝试 groupby 解决方案。它使用原始数据框和原始列
  • 当然,您可以像这样分配它们df['mean'] = pd.concat([df1[['difference']], df2[['difference']]]).groupby(level=0).mean()
猜你喜欢
  • 2014-09-28
  • 2021-08-07
  • 2021-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-21
相关资源
最近更新 更多