6

現在、R から Python に焦点を切り替えています。私は R で data.table をよく使用しますが、Python の一部の関数に相当するものを見つけるのが非常に難しい場合があります。

次のようなパンダデータフレームがあります。

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) を使用して、これを 1 行で簡単に行うことができ、元のデータ テーブル内に列を作成します。

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

私は周りを見回しましたが、次のようなものを利用できるかもしれないと思います:

df.groupby('A').size()
または
df['B'].argsort()

しかし、ここから先に進む方法と、新しい列を元のデータ フレームに結合する方法がわかりません。誰かが私に何か指針を与えることができれば、それは非常に役に立ちます。

どうもありがとう!

4

3 に答える 3

6
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
于 2012-10-23T14:17:06.900 に答える
1

比較のために、正しいdata.table構文は次のとおりです。

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

これにより、 への参照によって新しい列 C が追加されますdf:=演算子は R のパッケージの一部ですdata.table。これにより、列を追加および削除しdata.table、グループごと、参照ごとに、コピーなしで のサブセットに割り当てることができます。

于 2012-10-23T14:35:22.143 に答える
0

インデックスマジックは別の方法のようです:

df['C']=df.sort(['A','B'],inplace=True).groupby('A').reset_index().index.labels[1]
于 2012-10-23T14:57:02.117 に答える