python – 在Pandas中的lambda函数之后索引列消失了

我想在一小时内计算一些对象的百分比(‘时间’),所以我试图写一个lambda函数,我认为它完成了工作,但索引列消失了,数据帧的列被分组.

df = df.groupby(['id', 'name', 'time', 'object', 'type'], as_index=True, sort=False)['col1', 'col2', 'col3', 'col4', 'col5'].apply(lambda x: x * 100 / 3600).reset_index()

在那段代码之后我打印df.columns并得到了这个:

Index([u'index', u'col1', col2', u'col3',
       u'col4', u'col5'],
      dtype='object')

如果有需要,我将写一些包含每列值的表.
提前致谢.

最佳答案 pd.DataFrame.groupby用于聚合数据,而不是将函数应用于多个列.

对于简单的函数,您应该寻找矢量化解决方案.例如:

# set up simple dataframe
df = pd.DataFrame({'id': [1, 2, 1], 'name': ['A', 'B', 'A'],
                   'col1': [5, 6, 8], 'col2': [9, 4, 5]})

# apply logic in a vectorised way on multiple columns
df[['col1', 'col2']] = df[['col1', 'col2']].values * 100 / 3600

如果您希望将索引设置为多列,并且热衷于使用pd.DataFrame.apply,则可以将其作为两个单独的步骤.例如:

df = df.set_index(['id', 'name'])
df[['col1', 'col2']] = df[['col1', 'col2']].apply(lambda x: x * 100 / 3600)
点赞