相关疑难解决方法(0)

Pandas中map,applymap和apply方法之间的区别

你能告诉我什么时候使用这些矢量化方法和基本的例子吗?

我看到这map是一种Series方法,而其余的是DataFrame方法.我对此感到困惑applyapplymap方法.为什么我们有两种方法将函数应用于DataFrame?再一次,说明用法的简单例子会很棒!

python vectorization dataframe pandas

409
推荐指数
9
解决办法
26万
查看次数

如何将函数应用于两列Pandas数据帧

假设我有一个df'ID', 'col_1', 'col_2'.我定义了一个函数:

f = lambda x, y : my_function_expression.

现在我想应用fto 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)'
Run Code Online (Sandbox Code Playgroud)

怎么做 ?

** 添加详细示例如下 ***

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 …
Run Code Online (Sandbox Code Playgroud)

python dataframe pandas

289
推荐指数
13
解决办法
37万
查看次数

pandas根据其他列的值创建新列

我尝试过与其他问题不同的方法,但似乎仍无法找到问题的正确答案.关键的一点是,如果这个人被算作西班牙裔,他们就不能算作别的了.即使他们在另一个种族栏目中有"1",他们仍被视为西班牙裔,而不是两个或更多种族.同样,如果所有ERI列的总和大于1,则它们被计为两个或更多种族,不能被视为独特的种族(接受西班牙裔).希望这是有道理的.任何帮助将不胜感激.

它几乎就像在每行中执行for循环一样,如果每条记录符合条件,它们将被添加到一个列表中并从原始列表中删除.

从下面的数据框中,我需要根据以下内容计算新列:

========================= CRITERIA ======================== =======

IF [ERI_Hispanic] = 1 THEN RETURN “Hispanic”
ELSE IF SUM([ERI_AmerInd_AKNatv] + [ERI_Asian] + [ERI_Black_Afr.Amer] + [ERI_HI_PacIsl] + [ERI_White]) > 1 THEN RETURN “Two or More”
ELSE IF [ERI_AmerInd_AKNatv] = 1 THEN RETURN “A/I AK Native”
ELSE IF [ERI_Asian] = 1 THEN RETURN “Asian”
ELSE IF [ERI_Black_Afr.Amer] = 1 THEN RETURN “Black/AA”
ELSE IF [ERI_HI_PacIsl] = 1 THEN RETURN “Haw/Pac Isl.”
ELSE IF [ERI_White] = 1 THEN RETURN “White”
Run Code Online (Sandbox Code Playgroud)

评论:如果西班牙裔美国人的ERI标志为真(1),那么员工被归类为"西班牙裔"

评论:如果超过1个非西班牙语ERI标志为真,则返回"两个或更多"

====================== DATAFRAME =========================== …

python numpy apply pandas

251
推荐指数
7
解决办法
37万
查看次数

应用具有多个参数的函数来创建新的pandas列

我想pandas通过将函数应用于两个现有列来在数据框中创建新列.根据这个答案,当我只需要一列作为参数时,我就能够创建一个新列:

import pandas as pd
df = pd.DataFrame({"A": [10,20,30], "B": [20, 30, 10]})

def fx(x):
    return x * x

print(df)
df['newcolumn'] = df.A.apply(fx)
print(df)
Run Code Online (Sandbox Code Playgroud)

但是,当函数需要多个参数时,我无法弄清楚如何做同样的事情.例如,如何通过将列A和列B传递给下面的函数来创建新列?

def fxy(x, y):
    return x * y
Run Code Online (Sandbox Code Playgroud)

python pandas

140
推荐指数
5
解决办法
15万
查看次数

我什么时候应该在我的代码中使用pandas apply()?

这是一个自我回答的QnA,旨在指导用户应用的缺陷和好处.

我已经看到很多关于Stack Overflow问题的答案涉及使用apply.我也看到用户评论他们说" apply很慢",应该避免".

我已经阅读了很多关于性能主题的文章,解释apply很慢.我还在文档中看到了一个关于如何apply简单地传递UDF的便利函数的免责声明(现在似乎无法找到).因此,普遍的共识是,apply如果可能,应该避免.但是,这引发了以下问题:

  1. 如果apply是如此糟糕,那为什么它在API中呢?
  2. 我应该如何以及何时制作我的代码apply- 免费?
  3. 是否有过任何地方的情况apply不错的(比其他可能的解决方案更好)?

python performance apply pandas

68
推荐指数
3
解决办法
8380
查看次数

如何将lambda函数正确应用到pandas数据框列中

我有一个pandas数据框,sample其中一个被调用的列PR应用了lambda函数,如下所示:

sample['PR'] = sample['PR'].apply(lambda x: NaN if x < 90)
Run Code Online (Sandbox Code Playgroud)

然后,我得到以下语法错误消息:

sample['PR'] = sample['PR'].apply(lambda x: NaN if x < 90)
                                                         ^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

lambda pandas

21
推荐指数
2
解决办法
9万
查看次数

熊猫 - 应用函数缓慢的解释

对于大型数据帧(大约1~3百万行),应用函数似乎工作得非常慢.

我在这里检查了相关的问题,比如加速熊猫应用功能,以及在pandas apply()函数中计数,似乎加速它的最好方法是不使用apply函数:)

对于我的情况,我有两种与apply函数有关的任务.

第一:应用查找字典查询

f(p_id, p_dict):
    return p_dict[p_dict['ID'] == p_id]['value']

p_dict = DataFrame(...)  # it's another dict works like lookup table
df = df.apply(f, args=(p_dict,))
Run Code Online (Sandbox Code Playgroud)

第二:适用于groupby

f(week_id, min_week_num, p_dict):
    return p_dict[(week_id - min_week_num < p_dict['WEEK']) & (p_dict['WEEK'] < week_id)].ix[:,2].mean()

f_partial = partial(f, min_week_num=min_week_num, p_dict=p_dict)
df = map(f, df['WEEK'])
Run Code Online (Sandbox Code Playgroud)

我想对于第一种情况,它可以通过数据帧连接完成,而我不确定这种连接在大型数据集上的资源成本.

我的问题是:

  1. 在上述两种情况下,有没有办法替代申请?
  2. 为什么这么慢?对于dict查找案例,我认为它应该是O(N),即使N是100万,也不应该花费那么多.

python pandas

6
推荐指数
1
解决办法
9654
查看次数

如何生成包括 NaN 在内的随机值?

我想生成包含NaN在数据框中的随机浮点数np.random.randn

python numpy python-2.7 python-3.x pandas

1
推荐指数
1
解决办法
1304
查看次数