【问题标题】:Pandas dataframe apply function to entire column熊猫数据框将功能应用于整个列
【发布时间】:2015-09-06 15:45:34
【问题描述】:

我有一些函数作用于一个列表并返回一个列表。我想在 Pandas Dataframe 上创建一个列,这样新列是由作用于数据帧的其他列的函数之一返回的列表。

类似python的伪代码:

def function(parameter, list):
    ...
    return output_list

df['New Column'] = function(parameter, df['Old Column'])

我尝试了不同的选项,包括上面的代码,使用 .apply() 方法和其他方法......但没有成功。

有没有办法做到这一点?谢谢!

编辑: 有关解决方案,请参阅 Brian Pendleton 的答案。数据框中的列是 pandas 的 Series 对象。只需从所需列表中创建一个系列。

df['New_Column'] = pd.Series(data=function(parameter,list))

【问题讨论】:

  • 数据框中包含的对象是列表吗?还是您将Series 对象视为列表?
  • .apply() 是将函数逐行应用于Series 的方法。除此之外,您没有提供太多可使用的信息。
  • 确实, .apply() 由于您所说的原因而不起作用。如果我使用像这样的函数“function(parameter, df['Old Column'])”,我会得到一个 python 列表。但是我无法将数据框列等同于此类列表的值。编辑:我可以做一个循环,但这似乎效率很低。

标签: python pandas


【解决方案1】:

如果您将df["old column"] 发送到函数,那么您将发送pandas.Series 对象。为什么不直接使用该系列并返回相同形状的新系列。然后,您可以直接使用您的分配到新列。

【讨论】:

  • 这对我来说很有意义。我必须弄清楚如何产生一个系列作为函数的输出。打算用谷歌搜索并报告。
【解决方案2】:

我认为你想要:

  • 应用返回列表的函数
  • 将结果存储在DataFrame
  • 将列表分成不同的列

这是一个例子。

def my_funct(parameter):
return (1,2,3) + parameter

df = pd.DataFrame(np.random.randint(low=1, high=10, size=3), columns=['my_funct'])
#df['New Column'] = function(parameter, df['Old Column'])
df['my_funct'] = df['my_funct'].apply(lambda x: my_funct(x))

# After the function call the resulting lists are stored in one column

       my_funct
0     [5, 6, 7]
1  [10, 11, 12]
2     [6, 7, 8]

# Here is how to split the list into several columns

df = df['my_funct'].apply(pd.Series)

    0   1   2
0   5   6   7
1  10  11  12
2   6   7   8

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-23
    • 2018-03-27
    • 2013-02-28
    • 1970-01-01
    • 2019-02-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多