1つの列に多数の繰り返し値がある列を持つデータフレームがあります。その値のインスタンスが1つだけで、元のデータフレームの別の列の一致する値の平均とペアになっている別のデータフレームを作成したいと思います。例:
data = [[1,1],[1,2],[2,2],[3,3],[3,1],[2,3],[1,5],[2,7],[3,9]]
df = pd.DataFrame(data, columns = ['A', 'B'])
A B
0 1 1
1 1 2
2 2 2
3 3 3
4 3 1
5 2 3
6 1 5
7 2 7
8 3 9
同じ列Aの値と一致する列Bの値を平均したい。次に、次のような新しいデータフレームを作成します。
A B
0 1 2.7
1 2 4
2 3 4.3
私はループすることによってこれをしました:
df2 = pdDataFrame(columns = ['A','B'])
uni = df.A.unique()
for x in uni:
av = df.loc[(df['A'] == x, 'B')].mean()
df2 = df2.append(pd.DataFrame([[x, av]], columns = ['A', 'B']))
DataFrameをループするのは適切な形式ではなく、このプロセスには永遠に時間がかかりました。また、インデックスのないDataFrameになりました(すべて0でした)。これを行うためのより適切で効率的な方法は何ですか。前もって感謝します!
単に:
df.groupby('A')[['B']].mean().reset_index()
A B
0 1 2.666667
1 2 4.000000
2 3 4.333333
B
丸めたい場合:
df.groupby('A')[['B']].mean().round(1).reset_index()
A B
0 1 2.7
1 2 4.0
2 3 4.3
または、この方法でもA
、インデックスとして使用せず、引数を使用しますas_index=False
:
df.groupby('A', as_index=False)[['B']].mean().round(1)
A B
0 1 2.7
1 2 4.0
2 3 4.3
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加