假设我有一个df包含的列'ID', 'col_1', 'col_2'
。我定义一个函数:
f = lambda x, y : my_function_expression。
现在,我要应用f到df的两列'col_1', 'col_2'
,以逐元素的计算新列'col_3'
,有点像:
df['col_3'] = df[['col_1','col_2']].apply(f)
# Pandas gives : TypeError: ('<lambda>() takes exactly 2 arguments (1 given)'
怎么做 ?
如下添加详细样本 *
import pandas as pd
df = pd.DataFrame({'ID':['1','2','3'], 'col_1': [0,2,3], 'col_2':[1,4,5]})
mylist = ['a','b','c','d','e','f']
def get_sublist(sta,end):
return mylist[sta:end+1]
#df['col_3'] = df[['col_1','col_2']].apply(get_sublist,axis=1)
# expect above to output df as below
ID col_1 col_2 col_3
0 1 0 1 ['a', 'b']
1 2 2 4 ['c', 'd', 'e']
2 3 3 5 ['d', 'e', 'f']
这是apply在数据框上使用的示例,我正在用进行调用axis = 1
。
请注意,区别在于,与其尝试将两个值传递给该函数f,不如重写该函数以接受pandas Series对象,然后对Series进行索引以获取所需的值。
In [49]: df
Out[49]:
0 1
0 1.000000 0.000000
1 -0.494375 0.570994
2 1.000000 0.000000
3 1.876360 -0.229738
4 1.000000 0.000000
In [50]: def f(x):
....: return x[0] + x[1]
....:
In [51]: df.apply(f, axis=1) #passes a Series object, row-wise
Out[51]:
0 1.000000
1 0.076619
2 1.000000
3 1.646622
4 1.000000
根据你的用例,有时创建一个pandas group
对象然后apply
在组中使用很有帮助。
怎么办? **添加详细示例如下***
问题内容: 您可以使用两个不同的列中的值作为参数来制作python pandas函数吗? 我有一个函数,如果两列的值在相同范围内,则返回1。否则返回0: 我希望第一个参数成为数据框中的一列,以使函数将采用该列中每一行的值。例如是,第二个参数是df [‘ResponseCol’]`。我希望结果是数据框中的新列。我遇到了几个 回答了类似问题的线程,但看起来这些参数是变量,而不是数据帧行中的值。 我尝试
本文向大家介绍将大写应用于Python中Pandas数据框中的列,包括了将大写应用于Python中Pandas数据框中的列的使用技巧和注意事项,需要的朋友参考一下 在本教程中,我们将看到如何在DataFrame中使名称列变为大写。让我们看看实现目标的不同方法。 示例 我们可以使用upper()方法将其大写,从而为DataFrame分配一列。 让我们看一下代码。 输出结果 如果运行上面的程序,您将得
问题内容: 我在将大写字母应用于DataFrame中的列时遇到麻烦。 数据框为。 是需要应用大写的列标题。 问题是值由三个字母和三个数字组成。例如是值之一。 我收到一个错误: 如何将大写字母应用于DataFrame列中的前三个字母? 问题答案: 这应该工作: 并且您是否希望所有名称都使用大写格式:
问题内容: 我对熊猫还很陌生,所以我希望这将是一个简单的答案(我也感谢所有指向数据框设置的指针) 假设我有以下DataFrame: 现在,我想按“ gp”分组并获取“ vector”的均值 我试过了 乃至 但我收到一个错误,没有要聚合的“数字类型”。那么np.arrays在熊猫中不起作用吗? 问题答案: 对我来说,它有效: 我取两次平均值,因为您想要向量均值的均值组值(不是吗?)。 如果要使用均值
问题内容: 我想将带有参数的函数应用于python pandas中的系列: 问题答案: 位置参数添加到系列元素之后。 对于旧版本的pandas: 文档对此进行了清楚的说明。apply方法接受应具有单个参数的python函数。如果要传递更多参数,则应按照在其评论中的建议使用。 一个例子: 你也可以使用传递关键字参数。 另一种方法是创建一个lambda: 但我认为使用partial会更好。