python-计算组内的差异

我有一个DataFrame,其行一次提供一个功能的值.时间由“时间”列标识(大约有1000000个不同的时间).功能功能列标识(有几十个功能).功能和时间的任意组合最多为一行.每次仅提供某些功能.唯一的例外是功能0,该功能始终可用.我想在该DataFrame中添加一列,以显示当时功能0的值.有合理的快速方法吗?

例如,假设我有

df = pd.DataFrame({
  'time': [1,1,2,2,2,3,3],
  'feature': [1,0,0,2,4,3,0],
  'value':[1,2,3,4,5,6,7],
})

我想添加一个包含[2,2,3,3,3,3,7,7]的列.

我尝试使用groupby和boolean索引,但是没有运气.

解决方法:

I’d like to add to that DataFrame a column that shows the value of the feature 0 at that time. Is there a reasonably fast way to do it?

我认为,groupby(这是一项非常昂贵的操作)对于此而言是一个过大的杀伤力.尝试使用仅0功能的值进行合并:

>>> pd.merge(
        df,
        df[df.feature == 0].drop('feature', axis=1).rename(columns={'value': 'value_0'}))
    feature     time    value   value_0
0   1   1   1   2
1   0   1   2   2
2   0   2   3   3
3   2   2   4   3
4   4   2   5   3
5   3   3   6   7
6   0   3   7   7

编辑

根据@jezrael的要求,这是一个计时测试:

 import pandas as pd

 m = 10000

 df = pd.DataFrame({
   'time': range(m / 2) + range(m / 2),
   'feature': range(m / 2) + [0] * (m / 2),
   'value': range(m),
 })

在此输入上,@ jezrael的解决方案花费396毫秒,而我的花费4.03毫秒.

相关文章

转载:一文讲述Pandas库的数据读取、数据获取、数据拼接、数...
Pandas是一个开源的第三方Python库,从Numpy和Matplotlib的基...
整体流程登录天池在线编程环境导入pandas和xrld操作EXCEL文件...
 一、numpy小结             二、pandas2.1为...
1、时间偏移DateOffset对象DateOffset类似于时间差Timedelta...
1、pandas内置样式空值高亮highlight_null最大最小值高亮背景...