私は(iPythonノートブック内)のPython 2.7を使用していると私は、次のパンダのデータフレームを持っている:Pythonの:どのモード(第一COL - オブジェクト)を見つけるために、第二COLによってグループ化し、出力第三COLへ
df = pd.DataFrame({'Client': [161252, 8858, 8858, 8858, 8858, 56552, 56552],
'State': ['NE', 'MN', 'MN', 'TX', 'MN', 'NJ', 'WA']})
私がしたいのは、 "クライアント"によって行をグループ化し、各クライアントの "状態"のモードを見つけて、 "Mode_State"という新しい列に出力を配置することです。 "State"列はPythonオブジェクトです。
私は次のことを試してみた:
from scipy.stats import mode
df.insert(1, 'Mode_State', ' ')
df['Mode_State'] = df['State'].groupby(df["Client"]).transform(mode)
df
これは、次のような結果になります。
Client Mode_State State
0 161252 NE NE
1 8858 MN MN
2 8858 3 MN
3 8858 MN TX
4 8858 3 MN
5 56552 [NJ] NJ
6 56552 [1] WA
私はscipy.statsもモードの数が含まれていることを実現するので、私が試した ( のモード番号ではなく、2文字の状態情報を返すだけです)。
df['Mode_State'] = df['State'].groupby(df["Client"]).transform(mode[0])
df
TypeError Traceback (most recent call last)
<ipython-input-42-1050c2b46d90> in <module>()
1 from scipy.stats import mode
2
----> 3 df['Mode_State'] = df['State'].groupby(df["Client"]).transform(mode[0])
4 df
TypeError: 'function' object has no attribute '__getitem__'
私は、文字列(例えば扱うStackExchange上の様々な反応をも試してみました。もちろん私に与えた
ラムダ、アグ、地図など)。私の最初の結果やエラーメッセージが変わってきています。等しいモードが2つある場合(たとえば、クライアント56552にNJ & WAがある場合)、結果が最も低いものとして返されても問題ありません。
誰かが正しい方向で私を指すヒントを持っていると感謝します。
ありがとうございます(もちろん、まだPythonを勉強していないので経験はあまりありません)。データ分析のためのWes McKinneyのPythonを使って作業していますが、 文字列を使って作業するのが少し難解です。応答するため
アレクサンダーありがとう、これは私のためにうまくいった。クライアント56552には同じモード(NJ&WA)がありますので、答えが最も低い(NJ&NJ)のように設定する方法がありますか? – gincard
df.modeのドキュメント文字列ごとに: '選択された軸に沿った各要素のモードを取得します。何もない場合は、 は2回以上出現します。ラベルごとに各モードごとに行を追加し、 をnanで埋めます。 選択した 軸(複数のアイテムが最大頻度を共有する場合)に複数の値が返される可能性があります。これは、データフレームが返される の理由です。欠けている値 をデータフレーム '' df''のモードで補うには、次のようにします: '' df.fillna(df.mode()。iloc [0]) '' ' – Alexander