【发布时间】:2012-10-23 13:41:52
【问题描述】:
我目前已将注意力从 R 转移到 Python。我经常在 R 中使用 data.table,我发现有时很难找到 Python 中某些函数的等价物。
我有一个看起来像这样的 pandas 数据框:
df = pd.DataFrame({'A':['abc','def', 'def', 'abc', 'def', 'def','abc'],'B':[13123 ,45,1231,463,142131,4839, 4341]})
A B 0 abc 13123 1 def 45 2 def 1231 3 abc 463 4 def 142131 5 def 4839 6 abc 4341
我需要创建一个基于A和B从1递增的列,以便它指示B的递增顺序。所以我首先创建排序数据框,我有兴趣创建的列是C为下面:
A B C 1 abc 463 1 6 abc 4341 2 0 abc 13123 3 3 def 45 1 2 def 1231 2 5 def 4839 3 4 def 142131 4
在 R 中,使用 library(data.table),这可以很容易地在一行中完成,并在原始数据表中创建一列:
df[, C := 1:.N, by=A]
我环顾四周,我想我可以利用这样的东西:
df.groupby('A').size()
或
df['B'].argsort()
但不确定如何从这里开始,以及如何将新列连接回原始数据框。如果有人能给我任何指示,那将非常有帮助。
非常感谢!
【问题讨论】:
-
这似乎是不正确的
data.table语法。你的意思是df[,C:=1:.N,by=A]?为什么要先setkey,你可以把它留给临时的。 -
是的,抱歉,我已经更正了 R 代码中的错字。感谢您指出。无论如何,我更感兴趣的是在 Python 中找到一种方法。
-
那还是错的。这将复制
df的整个,这是data.table改进的R 的data.frame的(有些差的)功能之一。你不可能经常使用data.table,错过了这个。 -
因为
:=by group 是data.table的主要功能。您已发布到 python 和 pandas 标签,所以作为data.table的作者,我不希望看到data.table在广大观众面前被不当使用。 -
好的,当然。我明白你的意思了。我已经修改了上面的 R 代码。
标签: python r pandas data.table