为了账号安全,请及时绑定邮箱和手机立即绑定

Pandas:将函数应用于行,写入新列

Pandas:将函数应用于行,写入新列

素胚勾勒不出你 2021-07-15 14:11:16
将函数应用于数据框我目前有以下数据框:数据url                            visitorshttp://somedomain.com          200000http://someotherdomain.com     150000http://somenewdomain.com       11000对于数据框中的每一行,我喜欢将两个函数应用于 url 列,然后将每个结果写入两个不同的列“meta”和“content”。职能:def metacrawler(url)    ...    return datadef contentcrawler(url)    ...    return data# Counterprogress = 0环形for index, row in data.iterrows():    print(str(progress)," out of ",str(len(data)))    print('Starting meta crawling.')    row['meta'] = metacrawler(row["url"])    print('Starting content crawling.')    row['content'] = contentcrawler(row["url"])    print('Complete.')    progress += 1但是,当我在几次迭代后中止该过程时,我发现没有数据写入数据框中。也没有创建列。我做错了什么?
查看完整描述

1 回答

?
MMMHUHU

TA贡献1834条经验 获得超8个赞

您可以使用该.apply()功能的文档与result_type='expand'


In [3]: df = pd.DataFrame({'one':[1,2,3,4], 'two':[5,6,7,8]})


In [4]: df.apply(lambda x: (sum(x), sum(x)), axis=1, result_type='expand')

Out[4]:

    0   1

0   6   6

1   8   8

2  10  10

3  12  12


In [5]: df[['new', 'etc']] = df.apply(lambda x: (sum(x), sum(x)), axis=1, result_type='expand')


In [6]: df

Out[6]:

   one  two  new  etc

0    1    5    6    6

1    2    6    8    8

2    3    7   10   10

3    4    8   12   12

编辑:如果要显示进度,请单独定义应用功能即


def func(row):

    print(row)

    return sum(row), sum(row)



In [3]: df = pd.DataFrame({'one':[1,2,3,4], 'two':[5,6,7,8]})


In [4]: df.apply(func), axis=1, result_type='expand')

Out[4]:

    0   1

0   6   6

1   8   8

2  10  10

3  12  12


In [5]: df[['new', 'etc']] = df.apply(lambda x: (sum(x), sum(x)), axis=1, result_type='expand')


In [6]: df

Out[6]:

   one  two  new  etc

0    1    5    6    6

1    2    6    8    8

2    3    7   10   10

3    4    8   12   12


查看完整回答
反对 回复 2021-07-21
  • 1 回答
  • 0 关注
  • 119 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信