python - 创建一个基于 Python 中的另一列递增的列

标签 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]})

     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 中,使用库 (data.table),这可以在一行中轻松完成,并在原始数据表中创建一列:

df[, C := 1:.N, by=A]

我环顾四周,我想我可以使用这样的东西:

df.groupby('A').size()
or
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

关于python - 创建一个基于 Python 中的另一列递增的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13031803/

相关文章:

Python、请求、线程、python 请求关闭其套接字的速度有多快?

python - 无法在我的 VPS 上运行 CGI 程序

r - 如何处理......当最后一个参数为空时?

python - Pandas:检查列值是否唯一

python - itertools.ifilter 与 IPython 并行

python - google.appengine.api.urlfetch 的截止日期是否限制为 60 秒?

r - 你如何用赋值运算符结束管道?

R - 有效地计算每组二进制变量中的开关数

python - Pandas 不进口吗? 'NameError: global name ' pandas'未定义'

python - 在其他列中选择满足多个条件的列值