【问题标题】:How to add multiple columns to a dataframe using a function returning a serie如何使用返回系列的函数将多列添加到数据框
【发布时间】:2022-12-21 19:49:52
【问题描述】:

我有两个数据框:

import pandas as pd
df = pd.DataFrame({'Name':['Tom','Jhon','Dan'], 'start': [4,6,10], 'stop':[7,7,12]})
d = pd.DataFrame({'ID':['Tom','Tom','Tom','Tom','Jhon','Dan'],'game':[3,5,6,9,7,11] ,'hits': [10,12,9,8,8,6],'kills':[4,8,5,6,3,2]})

df: d:

我想根据条件过滤d向df添加2列。
我能够通过 col 来做到这一点:

def get_hits(row):
     return d[(d['ID']==row['Name']) & (d['game']>row['start']) & (d['game']<row['stop'])]['hits'].sum()
def get_kills(row):
    return d[(d['ID']==row['Name']) & (d['game']>row['start']) & (d['game']<row['stop'])]['kills'].sum()
df['ok_hits']=df.apply(lambda row: get_hits(row), axis=1)
df['ok_kills']=df.apply(lambda row: get_kills(row), axis=1)

问题:是否可以使用下面的函数同时添加两列,返回一个系列?
在实践中,我必须为很多专栏做这件事。

def get_hits_kills(row):
    return d[(d['ID']==row['Name']) & (d['game']>row['start']) & (d['game']<row['stop'])][['hits','kills']].sum()

【问题讨论】:

    标签: python apply


    【解决方案1】:

    df[['hits', 'kills']] = df.apply(get_hits_kills, axis=1) 会完成这项工作。有关更多信息,请在此处查看 apply 文档。

    【讨论】:

    • 好的,最后一个函数中缺少括号。我改变了它,并且解决方案效果很好
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-26
    • 1970-01-01
    • 2023-01-29
    • 1970-01-01
    • 1970-01-01
    • 2023-01-28
    • 1970-01-01
    相关资源
    最近更新 更多