【问题标题】:Indexing pandas series with parent dataframe index使用父数据框索引索引熊猫系列
【发布时间】:2016-04-20 11:18:22
【问题描述】:

我想在熊猫数据框的每一行上运行一个函数,并在派生列得分中输出它的值:下面显示的函数是一个 lambda,但该函数应该能够按父数据框列标签进行索引并访问列名如 row['col1'] ,但一个系列对象被传递给丢失列标签信息的 lambda 函数:

例如:

def calculate(row):
    cols=row.columns
    loc=row['loc']
    h=row['h']
    isst=row['Ist']
    Hol=row['Hol']
    return loc+h+len(cols)

a['score']=a.apply(lambda row:calculate(row),axis=1)

给予:

AttributeError: ("'Series' object has no attribute 'columns'", u'occurred at index 0')

那么如何在 lambda 函数中访问一个命名序列,比如命名元组?

一个快速的破解方法是:

a['score']=a.apply(lambda row:calculate(makedict(row,row.index)),axis=1)

makedict 函数将为每一行创建一个字典,以便在函数中通过列标签访问它。但是有熊猫的方式吗?

【问题讨论】:

    标签: python pandas lambda apply


    【解决方案1】:

    终于找到了有帮助的 to_dict 函数:

    def calculate(row):
        row=row.to_dict()
        loc=row['loc']
        h=row['h']
        isst=row['Ist']
        Hol=row['Hol']
        return loc+h+len(row.keys())
    
    a['score']=a.apply(calculate,axis=1)
    

    【讨论】:

      【解决方案2】:

      为什么不:

      a['score']=a.apply(lambda row:row['loc'] + row['h']+len(row.index),axis=1)
      

      【讨论】:

      • 行成为一个系列对象,因此列索引不可能
      • A DataFrame 有一个索引和列。从框架中提取一行后,它是一个Series,它有一个索引,如上。新系列的索引将与 DataFrame 中的列相同。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-07-10
      • 2014-10-11
      • 2017-03-06
      • 1970-01-01
      • 2016-06-13
      • 1970-01-01
      • 2013-08-19
      相关资源
      最近更新 更多