【问题标题】:Append results of DataFrame apply lamda to DateFrame or new Series将 DataFrame 的附加结果应用 lambda 到 DataFrame 或新系列
【发布时间】:2018-10-07 05:16:29
【问题描述】:

我正在使用带有 lamda 的 apply 方法来计算 Dataframe 的每一行以返回一个系列。

statsSeries = matchData.apply(lambda row: mytest(row), axis=1)

其中 mytest(row) 是一个返回时间戳、浮点数、浮点数的函数。

def mytest(row):
    timestamp = row['timestamp'] 
    wicketsPerOver = row['wickets']/row['overs']
    runsPerWicket = row['runs']/row['wickets'] 
    return timestamp, wicketsPerOver, runsPerWicket 

正如我所写,statsSeries 包含两列,一列是索引,另一列是 (timestamp、wicketsPerOver、runsPerWicket) 的元组。

如何返回包含三列 [timestamp、wicketsPerOver、runsPerWicket] 的系列?

【问题讨论】:

  • 我猜你可能希望返回row.name, timestamp, wicketsPerOver, runsPerWicket。这将使您可以交叉引用帧

标签: python pandas lambda apply series


【解决方案1】:

看来您需要使用pd.Series.apply(pd.Series)

这是一个最小的例子:

import pandas as pd

df = pd.DataFrame({0: [1, 2, 3, 4]})

def add_some(row):
    return row[0]+1, row[0]+2, row[0]+3

df[[1, 2, 3]] = df.apply(add_some, axis=1).apply(pd.Series)

print(df)

   0  1  2  3
0  1  2  3  4
1  2  3  4  5
2  3  4  5  6
3  4  5  6  7

【讨论】:

  • 完美。谢谢。
猜你喜欢
  • 1970-01-01
  • 2018-01-09
  • 2014-12-06
  • 2017-05-21
  • 2020-02-20
  • 2019-03-22
  • 2018-07-15
  • 1970-01-01
  • 2015-03-06
相关资源
最近更新 更多