1

次のように MultiIndex pandas DataFrame があります。

df = pandas.DataFrame({"index": ["a", "a", "a", "b", "b", "b"], "id": [1,2,3,4,5,6], "name": ["jim", "jim", "jim", "bob", "bob", "bob"], "date":['12/5/1999','12/6/1999','18/4/2000','12/4/2006','14/9/2007','16/4/2008']}).set_index("index")

これは、異なる時間に発生したイベントを牽引する人々を表しています。イベントが発生した日付に従って、各インデックス内の各行に新しい値を順次インクリメントする新しい列 date_order を追加したいと考えています。各イベントが発生しました。つまり、各人には、イベントが発生した順序で割り当てられた日付順の値があり、1 から始まり、古いイベントごとに増加します。

これが私が終わらせたいものです。

index   id  name    date        date_order
a       1   jim     12/5/1999   3
a       2   jim     12/6/1999   2
a       3   jim     18/4/2000   1
b       4   bob     12/4/2006   3
b       5   bob     14/9/2007   2
b       6   bob     16/4/2008   1

これに date_order 列を追加することから始めdata['date_order'] = 1て、ラムダ関数とマップ関数を使用して反復子でインクリメントできると考えました。

これは私にとってはうまくいきませんでした。

これを行うための正しい方向への一般的なキックは非常に高く評価されます。ありがとう。

4

1 に答える 1

1

重複する値を持つインデックスを使用することはお勧めできません。オブジェクト.set_index("index")を呼び出さない場合の解決策は次のとおりです。DataFrame

import pandas as pd
df = pd.DataFrame({"index": ["a", "a", "a", "b", "b", "b"], "id": [1,2,3,4,5,6], "name": ["jim", "jim", "jim", "bob", "bob", "bob"], "date":['12/5/1999','12/6/1999','18/4/2000','12/4/2006','14/9/2007','16/4/2008']})
df["date_order"] = df.groupby(df["index"]).date.transform(pd.Series.rank, ascending=False)
于 2013-11-15T03:03:41.793 に答える