小编Dav*_*ear的帖子

python 3,pandas 和创建新列失败并显示 keyerror

我一直在数据框上使用 apply 方法来创建新列。所以,如果我有一个看起来像这样的 df:

stdf.columns
Index(['Username', 'First Name', 'Last Name', 'Class', 'Screens Typed','Time Spent', 'Avg Speed', 'Avg Acc'],  dtype='object')
Run Code Online (Sandbox Code Playgroud)

我一直在使用这样的语法来创建新列

stdf['uid'] = stdf['Username'].apply(lambda x: x[0:6]) + "-" + stdf['First Name'] + "-" + stdf['Last Name']
Run Code Online (Sandbox Code Playgroud)

今天,当使用相同的方法创建一个新列时,我在新列名上收到一个关键错误

stdf['truSpeed'] = stdf['nSpeed'].apply(lambda x: x * .1 * stdf["truAcc"])
Run Code Online (Sandbox Code Playgroud)

是的,“nSpeed”和“truAcc”确实作为列存在。

Index(['Username', 'First Name', 'Last Name', 'Class', 'Screens Typed', 'Time Spent', 'Avg Speed', 'Avg Acc', 'truTime', 'uid', 'truAcc',
Run Code Online (Sandbox Code Playgroud)

'nSpeed'], dtype='object')

keyerror 指向“truSpeed 标识符”。所以我的问题是为什么熊猫现在告诉我在尝试创建新列时我有一个关键错误,而它过去总是创建新列?

一定还有其他一些我没有看到的错误。

这是几乎完整的追溯

KeyError                                  Traceback (most recent call last)
/home/david/dev/msc/lib/python3.5/site-packages/pandas/indexes/base.py in get_loc(self, key, …
Run Code Online (Sandbox Code Playgroud)

python lambda apply pandas

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

使用 Pandas 将 groupby 聚合应用于原始数据框

我想做一些在电子表格中看起来很简单的事情,但我无法理解 pandas 中的语法。我有一个可以分组的数据集。我想确定每个组的聚合统计数据,然后使用聚合在原始数据框中创建一个新列。

例如,如果我的数据框如下所示:

d = pandas.dataframe({'class', : ['f1', 'f2', 'f3', 'f1'], 
'user': ['jack', 'jen', 'joe', 'jan'], 
'screen': [12, 23, 13, 15] })
Run Code Online (Sandbox Code Playgroud)

是的,它比我的数据集小得多

我想做类似的事情

d['gp'] = d['screen'].apply(d.groupby('class').stdev())
Run Code Online (Sandbox Code Playgroud)

并确保 d.groupby().stdev() 实际上是该行的该类的 stdev。换句话说,我不希望在计算 f2 类的 gp 等时使用 f1 类的 stdev。

我的大脑正在以电子表格模式或 Python for 循环进行思考。我知道必须有一个简单的 pandas 语法来执行此操作 - 但到目前为止,我还没有在搜索中找到任何似乎适合我的用例的内容。

python group-by pandas

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

标签 统计

pandas ×2

python ×2

apply ×1

group-by ×1

lambda ×1