S.z*_*hen 5 python r pandas data.table
我目前已将注意力从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]})
Run Code Online (Sandbox Code Playgroud)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,如下所示:
Run Code Online (Sandbox Code Playgroud)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中,使用库(data.table),可以在一行中轻松完成,并在原始数据表中创建一个列:
df [,C:= 1:.N,by = A]
我环顾四周,我想我可以使用这样的东西:
df.groupby('A').size()
或
df ['B'].argsort()
但不知道如何从这里开始,以及如何将新列连接回原始数据框.如果有人能给我任何指针,那将是非常有帮助的.
非常感谢!
In [61]: df
Out[61]:
A B
1 abc 463
6 abc 4341
0 abc 13123
3 def 45
2 def 1231
5 def 4839
4 def 142131
In [62]: df['C'] = df.groupby('A')['A'].transform(lambda x: pd.Series(range(1, len(x)+1), index=x.index))
In [63]: df
Out[63]:
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
Run Code Online (Sandbox Code Playgroud)