【问题标题】:how do i pass groupby elements as lists to a function in python/pandas如何将 groupby 元素作为列表传递给 python/pandas 中的函数
【发布时间】:2014-10-15 17:30:55
【问题描述】:

我正在尝试从 DataFrame 中的现有数据列生成新的数据列。但是,我的函数没有传递正确的信息。不知道如何解决这个问题。

masterframe =DataFrame() # contains column ud and column Symbol

masterframe['new'] = masterframe.groupby('Symbol').ud.apply(streak)

def streak(series): 

    count = 1
    x = [1,]

    for item in range(1,len(series)):
        if series[item] == series[item-1]:
            count += 1
        else:
            count = 1
        x.append(count)

    return x

我得到的错误是 KeyError: 1L

【问题讨论】:

  • DataFrame() 为空,因此它不包含任何内容...

标签: python pandas apply group-by


【解决方案1】:

Pandas 默认使用基于标签的索引,因此当您编写series[item] 时,它会在series 的索引中查找值item。要使用基于位置的索引,请使用.iloc,如下所示。

    if series.iloc[item] == series.iloc[item-1]:

【讨论】:

  • 感谢 vm- 这消除了错误,但我的值似乎仍然没有传递给函数。对于“新”的每个元素,我都会返回 NaN
  • 尝试添加print 向自己证明他们通过了。您的另一个问题是您的函数返回一个列表,请尝试在函数返回中包装一系列(即pd.Series(x))。
  • 使用 print 很有用 - 它表明该函数正在返回正确的数据,但由于某种原因无法将数据重新组合回父框架。
猜你喜欢
  • 2011-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-17
  • 2012-05-24
相关资源
最近更新 更多