回答編集履歴

3

2024/09/18 01:06

投稿

melian
melian

スコア20710

test CHANGED
@@ -1,38 +1,2 @@
1
- > 各ユーザーIDを持つ列を作成して、操作順に得点を格納する
1
+ 削除​​​​​​​​​​​​
2
2
 
3
- 「操作順に」とありますが、質問にあるコードでは操作順にソートする処理がありません。レコードが操作順にデータフレームに格納されているのかもしれませんが、念の為にソートしています。(`sort_values(['user_id', '操作順'])`)
4
-
5
- ```python
6
- import pandas as pd
7
- import io
8
-
9
- def point_mean(gamedf):
10
- gamedf['order'] = gamedf.sort_values(['user_id', '操作順']).groupby('user_id')['操作順'].cumcount()
11
- return gamedf.pivot(index='order', columns='user_id', values='point')
12
-
13
- # 「操作順」データが連続する値(例えば [0, 1, 2, 3, ..., 12, 13])の場合は pivot() だけでもよいはず
14
- # def point_mean(gamedf):
15
- # return gamedf.pivot(index='操作順', columns='user_id', values='point')
16
-
17
- if __name__ == '__main__':
18
- csv_data = '''
19
- user_id,操作順,point
20
- aaaa,0,10
21
- aaaa,1,2
22
- aaaa,2,100
23
- aaaa,13,20
24
- bbbb,0,5
25
- zzzz,13,40
26
- '''
27
- df = pd.read_csv(io.StringIO(csv_data))
28
-
29
- resultdf = point_mean(df)
30
- print(resultdf)
31
-
32
- # user_id aaaa bbbb zzzz
33
- # order
34
- # 0 10.0 5.0 40.0
35
- # 1 2.0 NaN NaN
36
- # 2 100.0 NaN NaN
37
- # 3 20.0 NaN NaN
38
- ```

2

2024/09/17 13:22

投稿

melian
melian

スコア20710

test CHANGED
@@ -9,6 +9,10 @@
9
9
  def point_mean(gamedf):
10
10
  gamedf['order'] = gamedf.sort_values(['user_id', '操作順']).groupby('user_id')['操作順'].cumcount()
11
11
  return gamedf.pivot(index='order', columns='user_id', values='point')
12
+
13
+ # 「操作順」データが連続する値(例えば [0, 1, 2, 3, ..., 12, 13])の場合は pivot() だけでもよいはず
14
+ # def point_mean(gamedf):
15
+ # return gamedf.pivot(index='操作順', columns='user_id', values='point')
12
16
 
13
17
  if __name__ == '__main__':
14
18
  csv_data = '''

1

2024/09/17 12:59

投稿

melian
melian

スコア20710

test CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
  def point_mean(gamedf):
10
10
  gamedf['order'] = gamedf.sort_values(['user_id', '操作順']).groupby('user_id')['操作順'].cumcount()
11
- return gamedf.pivot(index='user_id', columns='order', values='point').T
11
+ return gamedf.pivot(index='order', columns='user_id', values='point')
12
12
 
13
13
  if __name__ == '__main__':
14
14
  csv_data = '''