【问题标题】:mean of a column based on the index and another 2 columns基于索引和另外 2 列的列的平均值
【发布时间】:2020-12-12 21:07:20
【问题描述】:

我有这个数据框:

d = {'day': [0,0,0,0,0,0, 1,1,1,1,1,1, 2,2,2,2,2,2], 'period': ['p1','p1','op1','op1','p2','p2','p1','p1','op1','op1','p2','p2','p1','p1','op1','op1','p2','p2'], 's1':[2,2,3,6,4,2,8,2,1,2,1,2,2,9,5,2,2,3]}  
df = pd.DataFrame(data=d)

我需要这个结果:

我试过了:

df.groupby('period', as_index=False)['s1'].mean()

这是它的结果:

但这并没有解决我的问题..

【问题讨论】:

  • 您需要将数据框分成奇数和偶数索引。这是 as_index=False 假设要做的吗?我不确定..无论如何,给出df.groupby('period', as_index=False)['s1'].mean()的结果
  • 所以是的,你做了完整数据帧的平均值,而你想要的结果是数据帧中偶数和奇数索引值的平均值。你可以检查你确实做到了,因为 (4.00+4.33)/2=4.166, (3.00+3.33)/2=3.1666 and (2.333+2.333)/2=2.33
  • 不一定是偶数和奇数我有一个很大的df,其中有很多值,如p1和p2等。这只是一个用于简化问题的示例df..
  • 哦,好的,所以您需要考虑到您不想在同一“天”计算相同“周期”的值

标签: python pandas dataframe pandas-groupby


【解决方案1】:

计算每隔一个值分组的列。然后groupby()那个。

d = {'day': [0,0,0,0,0,0, 1,1,1,1,1,1, 2,2,2,2,2,2], 'period': ['p1','p1','op1','op1','p2','p2','p1','p1','op1','op1','p2','p2','p1','p1','op1','op1','p2','p2'], 's1':[2,2,3,6,4,2,8,2,1,2,1,2,2,9,5,2,2,3]}  
df = pd.DataFrame(data=d)
dfm = df.assign(
    even=lambda dfa: dfa.index%2
).groupby(["period","even"]).mean().reset_index().drop(columns="even")

print(dfm.to_string())

输出

  period  day        s1
0    op1  1.0  3.000000
1    op1  1.0  3.333333
2     p1  1.0  4.000000
3     p1  1.0  4.333333
4     p2  1.0  2.333333
5     p2  1.0  2.333333

【讨论】:

    【解决方案2】:

    你可以试试这个:

    df.groupby(['period',df.groupby(['day','period']).cumcount()]).mean()
    

    输出:

              day        s1
    period                 
    op1    0  1.0  3.000000
           1  1.0  3.333333
    p1     0  1.0  4.000000
           1  1.0  4.333333
    p2     0  1.0  2.333333
           1  1.0  2.333333
    

    【讨论】:

    • 谢谢这解决了我的问题,为了对其进行排序,我必须重命名索引并按 sort_index() 排序: df = df.rename(index={'op1"': "B ", 'p1': "A", 'p2': "C"}) 然后 df.sort_index()
    猜你喜欢
    • 1970-01-01
    • 2016-12-07
    • 2018-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多