【问题标题】:Applying function with multiple arguments to create a new pandas dataframe应用具有多个参数的函数来创建一个新的 pandas 数据框
【发布时间】:2017-06-17 20:13:25
【问题描述】:
df = pd.DataFrame(columns = ['Date','Data'])
# input some random data into df

test_log = pd.DataFrame(columns = ['Date','Data'])

def test_func(date, data):
    if data > 2:
        data = data * 2 
        d = {'Date':date, 'data':data}
        return d


df.apply(lambda x: test_func(x['Date'],x['Data']), axis=1)

首先,这不会返回一系列字典d。当apply 中使用的函数 (test_func) 返回单个值时,apply 方法会返回一个系列,但是当您从函数“test_func”返回字典时,df.apply 方法会将 df 中的值替换为返回值。

我想在df 的每一行上运行test_func,然后当test_func 返回一些内容时,它会在test_log 后面附加值即

test_log = test_log.append(d, ignore_index=True)

其中dtest_func 返回的字典

编辑:

执行时返回一个DataFrame:

def test_func(date, data):
    if data > 2:
        data = data * 2 
        d = {'Date':date, 'data':data}
        return pd.Series(d)

【问题讨论】:

  • 这个是,我的实际代码中的函数要复杂得多,这本质上是最简单的过程
  • 如果您提供可重现的问题和所需的最终结果,您将获得快速解决方案。否则,我们必须在字里行间阅读并弄清楚您要实现的目标。这不符合双方的最佳时间利益。

标签: python pandas numpy dictionary


【解决方案1】:

不用apply也可以实现同样的效果:

>>> import pandas as pd
>>> import numpy as np
>>> df = pd.DataFrame()
>>> df['Date'] = pd.date_range('01/01/2010', periods=5)
>>> df['Data'] = np.arange(0,5,1)
>>> df
        Date  Data
0 2010-01-01     0
1 2010-01-02     1
2 2010-01-03     2
3 2010-01-04     3
4 2010-01-05     4

>>> test_log = df.loc[df.Data > 2]
>>> test_log.Data = test_log.Data * 2
>>> test_log
        Date  Data
3 2010-01-04     6
4 2010-01-05     8

【讨论】:

猜你喜欢
  • 2013-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-13
  • 1970-01-01
  • 2021-05-10
  • 2020-12-07
  • 1970-01-01
相关资源
最近更新 更多