数え切れないほどのスレッド( 12 ...)に入りましたが、それでも問題の解決策が見つかりません... I次のようなデータフレームがあります。
_prop1 prop2 prop3 prop4
L30 3 bob 11.2
L30 54 bob 10
L30 11 john 10
L30 10 bob 10
K20 12 travis 10
K20 1 travis 4
K20 66 leo 10
_
Prop1でgroupbyを実行し、同時に、他のすべての列を集計しますが、一意の値のみを使用します。そのように:
_prop1 prop2 prop3 prop4
L30 3,54,11,10 bob,john 11.2,10
K20 12,1,66 travis,leo 10,4
_
私はさまざまな方法で試しました:
df.groupby('prop1')['prop2','prop3','prop4'].apply(np.unique)
は戻り値AttributeError: 'numpy.ndarray'オブジェクトには属性がありません 'index' PLUS TypeError:Series.nameはハッシュ可能なタイプである必要があります
また:.apply(lambda x: pd.unique(x.values.ravel()).tolist())
は出力としてリストを提供し、列が必要です。
複数の列があるため、df.groupby('prop1')['prop2','prop3','prop4'].unique()
自体は機能しません。
.apply(f)
(fは次のとおり)
def f(df): df['prop2']=df['prop2'].drop_duplicates() df['prop3']=df['prop3'].drop_duplicates() df['prop4']=df['prop4'].drop_duplicates() return df
何もしません。
.agg()
を使用しようとしましたが、成功しませんでした。あなたの一人は何か考えがありますか?
どうもありがとうございました :)
これを試してみてください、それは私にとって完璧に機能しました:
df.groupby(['prop1','prop2', 'prop4']).agg(lambda x: ','.join(x.unique())).reset_index()
これにより、次のような結果が得られます。
prop1 prop2 prop3 prop4
L30 3,54,11,10 bob,john 11.2,10
K20 12,1,66 travis,leo 10,4
melt
+ pivot_table
s = df.astype(str).melt(id_vars='prop1').drop_duplicates()
s.pivot_table(
index='prop1',
columns='variable',
values='value',
aggfunc=','.join)
variable prop2 prop3 prop4
prop1
K20 12,1,66 travis,leo 10.0,4.0
L30 3,54,11,10 bob,john 11.2,10.0