gpt4 book ai didi

python - Pandas:编辑索引值并根据新值重新分组

转载 作者:太空宇宙 更新时间:2023-11-03 19:53:49 24 4
gpt4 key购买 nike

我将索引设置为“ShiftId”,如下所示:201912240(日期后跟 0 或 1,表示白类或夜类)。我的 df 按索引值分组,按预期返回,如下所示:

           col1 col2
201912240 NaN 23
201912241 44 75
201912250 12 NaN
201912251 46 91

我想重新组合这个数据框以取每天的平均值(忽略 NaN 值),那么它看起来像这样

           col1 col2
20191224 44 49
20191225 29 91

但我无法对当前索引值进行分组。我已经尝试过了

    days_frame.index = days_frame.index.map(lambda x: str(x)[:-1])
days_frame.groupby(days_frame.index).mean()

但这甚至没有改变 df 中的任何内容?

请帮忙

最佳答案

您的解决方案对我来说有效,也许您忘记将输出分配给像df这样的变量:

days_frame.index = days_frame.index.map(lambda x: str(x)[:-1])
df = days_frame.groupby(days_frame.index).mean()
print (df)
col1 col2
20191224 44.0 49.0
20191225 29.0 91.0

另一种解决方案首先重命名索引,然后对每个索引值使用mean:

df = days_frame.rename(lambda x: str(x)[:-1]).mean(level=0)
print (df)
col1 col2
20191224 44.0 49.0
20191225 29.0 91.0

或者将索引转换为字符串,删除最后一个值并使用聚合mean传递给groupby:

df = days_frame.groupby(days_frame.index.astype(str).str[:-1]).mean()
print (df)
col1 col2
20191224 44.0 49.0
20191225 29.0 91.0

编辑:

如果想避免截断没有 A 列的所有列,请在写入文件之前使用此解决方案:

df = pd.DataFrame({'A':[.41,1.5,.2,2,.3],
'B':['a'] * 5,
'C':[3,4,5,4,5],
'D':[1.0,3,4,5,6]})

cols = df.columns.difference(['A'])

df[cols] = df[cols].applymap(lambda x: '%.0f' % x if isinstance(x, (float, int)) else x)
print (df)

A B C D
0 0.41 a 3 1
1 1.50 a 4 3
2 0.20 a 5 4
3 2.00 a 4 5
4 0.30 a 5 6

关于python - Pandas:编辑索引值并根据新值重新分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59661177/

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