Python 熊猫:编辑索引值并根据新值重新分组

Python 熊猫:编辑索引值并根据新值重新分组,python,pandas,Python,Pandas,我的索引设置为'ShiftId',如下所示:201912240(日期后面跟一个0或1,表示白班或夜班)。我将df按索引值分组,这些索引值按预期返回如下内容: col1 col2 201912240 NaN 23 201912241 44 75 201912250 12 NaN 201912251 46 91 我想重新组合这个数据帧,以获取每天的平均值(忽略NaN值),然后它将如下所示 col1 col2 20191224 4

我的索引设置为'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
或者将索引转换为字符串,删除最后一个值,并使用聚合
平均值传递到
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
编辑:

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

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

您为我提供的解决方案正在运行,可能您忘记了将输出分配给变量,如
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
或者将索引转换为字符串,删除最后一个值,并使用聚合
平均值传递到
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
编辑:

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

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

我能在这里再问你一个问题吗?主要是relevant@LlewellynHattingh-当然,来吧;)pd.set_选项('display.float_格式',lambda x:'%0.f'%x')。我用它来避免在html文件中得到截断的值。这是非常必要的,我遇到的问题是它对所有列进行了取整(这在很大程度上是好的),但有一个特定的列我不希望发生这种情况。。。因为否则我只看到0而不是0.322(这是非常重要的信息)。。Thanx@jezraelThanx,它似乎没有起作用。。我在一个大的.py文件中工作。。这可能有什么先决条件吗?或者我遗漏了什么?还有,我有你的密码。谢谢你的帮助!!我能在这里再问你一个问题吗?主要是relevant@LlewellynHattingh-当然,来吧;)pd.set_选项('display.float_格式',lambda x:'%0.f'%x')。我用它来避免在html文件中得到截断的值。这是非常必要的,我遇到的问题是它对所有列进行了取整(这在很大程度上是好的),但有一个特定的列我不希望发生这种情况。。。因为否则我只看到0而不是0.322(这是非常重要的信息)。。Thanx@jezraelThanx,它似乎没有起作用。。我在一个大的.py文件中工作。。这可能有什么先决条件吗?或者我遗漏了什么?还有,我有你的密码。谢谢你的帮助!!