【问题标题】:args elements don't seem to operate within apply functionargs 元素似乎不在 apply 函数中运行
【发布时间】:2019-02-06 18:08:18
【问题描述】:

我想将 pd.DataFrame.sum 与 apply 一起使用。但是,签名似乎不起作用

我从这里开始:python pandas: apply a function with arguments to a series,了解如何使用 apply 将参数传递给函数。我尝试了似乎更合适的答案(第三个),但仍然使用参数似乎不起作用。

indexes = ['2017-09-01 01:15:00', '2017-09-01 01:30:00', 
           '2017-09-01 01:54:00', '2017-09-01 01:59:00', 
           '2017-09-01 02:15:00', '2017-09-01 02:30:00', 
           '2017-09-01  02:54:00', '2017-09-01 02:59:00', 
           '2017-09-01 05:15:00', '2017-09-01 05:30:00', 
           '2017-09-01  05:54:00', '2017-09-01 05:59:00']
values_A = [1, 3, 4, 3, 5, 6, 3, 3, 9, 1, 9, 8]
values_B = [1, 3, 4, 3, 5, 6, 3, 3, 9, 2, 6, 3]

table = pd.DataFrame({'datetime' : indexes, 'A' : values_A, 'B' :   values_B})
table['datetime'] = pd.to_datetime(table['datetime'])
table.set_index('datetime', inplace=True)
table.sort_index(inplace=True)

我想要的(并使用

    table.groupby([pd.Grouper(freq='60Min', base=0)]).sum(skipna=True)

):

2017-09-01 01:00:00     11.0    11.0
2017-09-01 02:00:00     17.0    17.0
2017-09-01 03:00:00     NaN     NaN
2017-09-01 04:00:00     NaN     NaN
2017-09-01 05:00:00     27.0    20.0

我得到了什么(使用

table.groupby([pd.Grouper(freq='60Min',base=0)]).apply(pd.Series.sum, skipna = True):

2017-09-01 01:00:00     11.0    11.0
2017-09-01 02:00:00     17.0    17.0
2017-09-01 03:00:00     0.0     0.0
2017-09-01 04:00:00     0.0     0.0
2017-09-01 05:00:00     27.0    20.0

【问题讨论】:

    标签: python pandas apply


    【解决方案1】:

    这并不是真正的解决方案。但这是一种规避问题的方法。如果我这样做了

    table['hour'] = table.index.hour
    table.groupby([pd.Grouper(freq='60Min', base=0), 'hour']).apply(pd.Series.sum, skipna = True)
    

    不存在的时间将被删除。但是,这并不能解释观察到的行为。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-13
      • 1970-01-01
      • 2021-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多