【问题标题】:In Pandas, how do I apply a function to a row of a dataframe, where each item in the row should be passed to the function as an argument?在 Pandas 中,如何将函数应用于数据帧的一行,其中行中的每个项目都应作为参数传递给函数?
【发布时间】:2020-05-01 14:36:10
【问题描述】:

换句话说,假设我有一个包含一些列的数据框,并且表格中有数字数据。例如,我有身高、体重、年龄。包含数字的简单数据框。

我想要的是制作一个新系列(并将其添加到数据框中),这是使用每一行中的每个项目进行一些计算的结果。 所以我有一个函数 f(height, weight, age),我希望将该函数的数值结果存储为它自己的新列。

所以在给定的行上,我会得到身高、体重、年龄和 f() 的结果。

对不起,我探索了很多 pandas 应用示例,但在这里找不到任何完全符合我想法的东西,尽管它似乎应该是可行的!

提前致谢!

【问题讨论】:

  • 请分享您的示例数据框和预期输出

标签: python pandas dataframe


【解决方案1】:

让我们举个例子,我们有一个数据框,其中有体重和身高。

我们可以使用apply 函数对每一行应用一个函数,其中包含所有列或选定列,如下所示:

df = pd.DataFrame({"height": [180, 178, 190, 166], 'weight': [78, 72, 89, 75] })

print(df)

   height  weight
0     180      78
1     178      72
2     190      89
3     166      75

def bmi(x):
    return x.weight/((x.height/100)**2)

df['bmi'] = df.apply(lambda x: bmi(x), axis=1)

print(df)

   height  weight        bmi
0     180      78  24.074074
1     178      72  22.724403
2     190      89  24.653740
3     166      75  27.217303

【讨论】:

  • 这正是我想要的,谢谢!在我阅读的任何示例中,我只是没有看到类似的东西。再次感谢!
【解决方案2】:

现在,如果我理解正确,您的函数会使用您的数据(身高、体重和年龄)为每一行计算一个值,该值将位于数据框中的新列中,对吗?

现在您想逐行执行该操作,我不知道为什么?你想迭代你的数据框吗?我没有足够的关于你的函数的信息来判断这是否真的需要,但通常我会避免这种方法,因为它比运行如下的胜利过程要慢得多:

df['result'] = #whatever your function is doing using the df['height', 'weight', 'age']

例如,假设您的函数将身高乘以体重,然后除以年龄,因此您可以执行以下操作:

df['result'] = (df['height'] * df['weight']) / df['age']

【讨论】:

  • 我刚刚看到了@Saurabh 的回答,如果您仍然想坚持使用函数方法,那将可以解决问题。
  • 谢谢!我还是 pandas 框架的新手,所以所有这些都很有帮助!
猜你喜欢
  • 2021-01-11
  • 2021-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-30
  • 1970-01-01
  • 1970-01-01
  • 2012-10-08
相关资源
最近更新 更多