Pythonでグループ化されたデータから最大値を見つける

Shosho

1日の食事の数を示すデータセットがあります。列の週は、その日付が属する月の週を示します。以下のデータの例を参照してください。

Id.        date.               Meals   Week
 1        2020-02-23            1         4
 1        2020-02-24            1         5
 1        2020-02-25            2         5
 1        2020-02-27            1         5
 1        2020-01-03            2         1
...         ...                ...       ...
 2        2020-03-04            3         2
 2        2020-03-05            4         2
 2        2020-03-06            3         2
 2        2020-03-07            1         2
 2        2020-03-08            2         2

各参加者の各週の平均食事数を取得するために、参加者IDと週に基づいてデータをグループ化しています。Plzは以下を参照してください:

d = data[['Id','Week','Meals']].groupby(['Id', 'Week'],sort=False ).agg('mean')

                                 Meals
               ID          Week
                1           4   1.400000
                            5   1.333333
                            1   2.000000
                            2   1.250000
                            3   1.000000
                2           2   2.000000
                            3   2.142857
                            4   2.500000
                            5   2.500000
                3           2   2.555556
                            3   2.600000
                            4   1.833333
                            5   2.000000
                            1   2.000000

私の最初の質問:

  1. 各参加者の食事の最大数が最初または先週だった場合。

リッチーが答えた後、次の出力:

print(df.head(50).to_dict('split')

です

{'index': [('"55eb3fea748092000daa9b25"', 4), ('"55eb3fea748092000daa9b25"', 5), ('"55eb3fea748092000daa9b25"', 1), ('"55eb3fea748092000daa9b25"', 2), ('"55eb3fea748092000daa9b25"', 3)], 'columns': ['Meals'], 'data': [[1.4], [1.3333333333333333], [2.0], [1.25], [1.0]]}

私の2番目の質問(私の投稿を更新した後)は次のとおりです:

  1. 最大の週はどの(研究の週)でしたか?研究は1-4 / 5週間行われたことに注意してください。したがって、出力は次のようになり、(調査の週)という追加の列が追加されます。

出力:

                                Meals      max_week
Id  Week    Week of the study       
1    4            1               1          FALSE
     5            2               1          FALSE
     1            3               2          TRUE
     2            4               1          FALSE
     3            5               1          FALSE
2    2            1               2          FALSE
     3            2               2          FALSE
     4            3               2          TRUE
     5            4               2          TRUE
3    2            1               2          FALSE
     3            2               2          TRUE
     4            3               2          FALSE
     5            4               3          FALSE
     1            5               3          FALSE

次に、次のように、ID、調査の週、およびスナックを実際の最大週のみ保存します。

                                 Meals    max_week
ProlificId  Week of the study       
    1              3                2       TRUE
    2              3                2       TRUE
    2              4                2       TRUE
    3              2                2       TRUE

あなたの助けは高く評価されていますShosho

RichieV

したがって、Week of the study1人あたりの平均食事数が最大のを見つけるだけでよいようですId

次のサンプルを取ります

import pandas as pd
import numpy as np

# sample data
# please always provide a callable line of code with your data
# you can get it with df.head(10).to_dict('split')
# read more about this in https://stackoverflow.com/q/63163251/6692898
# and https://stackoverflow.com/q/20109391/6692898
np.random.seed(123) # include when creating random sample
days, people = 18, 2
data = pd.DataFrame({
    'Id': [i for _ in range(days) for i in range(1, people + 1)],
    'Date': pd.date_range('2020-02-23', periods=days).repeat(people).values,
    'Meals': np.random.randint(1, 5, days * people),
})
# data['Week_of_month'] = (data['Date'].dt.day - 1) // 7 + 1
data['Week_of_the_study'] = data['Date'].dt.isocalendar().week
data['Week_of_the_study'] -= data['Week_of_the_study'].min() - 1
print(data)

    Id       Date  Meals  Week_of_the_study
0    1 2020-02-23      3                  1
1    2 2020-02-23      2                  1
2    1 2020-02-24      3                  2
3    2 2020-02-24      3                  2
4    1 2020-02-25      1                  2
5    2 2020-02-25      3                  2
6    1 2020-02-26      3                  2
7    2 2020-02-26      2                  2
8    1 2020-02-27      4                  2
9    2 2020-02-27      3                  2
10   1 2020-02-28      4                  2
11   2 2020-02-28      2                  2
12   1 2020-02-29      3                  2
13   2 2020-02-29      2                  2
14   1 2020-03-01      1                  2
15   2 2020-03-01      2                  2
16   1 2020-03-02      3                  3
17   2 2020-03-02      4                  3
18   1 2020-03-03      2                  3
19   2 2020-03-03      1                  3
20   1 2020-03-04      3                  3
21   2 2020-03-04      1                  3
22   1 2020-03-05      4                  3
23   2 2020-03-05      2                  3
24   1 2020-03-06      4                  3
25   2 2020-03-06      3                  3
26   1 2020-03-07      2                  3
27   2 2020-03-07      1                  3
28   1 2020-03-08      1                  3
29   2 2020-03-08      1                  3
30   1 2020-03-09      1                  4
31   2 2020-03-09      2                  4
32   1 2020-03-10      4                  4
33   2 2020-03-10      4                  4
34   1 2020-03-11      3                  4
35   2 2020-03-11      1                  4

そしてコード

max_weeks = ( # get average meals per week & Id
    data.groupby(['Id', 'Week_of_the_study'])
    ['Meals'].mean()
).rename('max_meals')

max_weeks = max_weeks.loc[ # filter only weeks with highest avg meals
    max_weeks == max_weeks.groupby('Id').transform(max)
].to_frame()

出力

                      max_meals
Id Week_of_the_study
1  1                   3.000000
2  2                   2.428571

古い答え

groupby.transform現在の出力の後に使用して、最大週を取得できます

d = data.groupby(['ProlificId', 'Week'])['Snacks'].mean().to_frame()

# most use cases want to separate by year/month as well, in that case use
# data['date'] = pd.to_datetime(data['date'])
# data['Year'] = data['date'].dt.year
# data['Month'] = data['date'].dt.month
# d = data.groupby(['ProlificId', 'Year', 'Month', 'Week'])['Snacks'].mean().to_frame()

d['max_week'] = d == d.groupby('ProlificId').transform(max)

出力

                   Snacks  max_week
ProlificId Week
1          1     2.000000      True
           4     1.000000     False
           5     1.333333     False
2          2     2.600000      True

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Pythonでグループ化されたデータフレームの最小数を見つける方法

分類Dev

Pythonでforループから生成された値の合計を見つける

分類Dev

グループ化されたパンダリストで巡回最大値を見つける簡単な方法

分類Dev

dplyrでグループ化された値の違いを見つける

分類Dev

特定の列から最大値を見つけ、その後それらでグループ化します

分類Dev

Rの整頓されたデータで複数のグループの平均値を見つける

分類Dev

値でグループ化された最も頻繁な値を見つけるためのSQLクエリ

分類Dev

「グループ化された」または「天国の」データを見つける方法は?

分類Dev

Rでグループ化されたデータフレームのGAMから値を予測する

分類Dev

間隔でグループ化された応答時間を見つける

分類Dev

グループ化された変数で重複を見つける

分類Dev

GWASでリードSNPを見つける-近接度でグループ化された行の最小値を見つける

分類Dev

GWASでリードSNPを見つける-近接度でグループ化された行の最小値を見つける

分類Dev

データフレームの値でフィルタリングされた行列の行から最小数を見つけますか?

分類Dev

2つのデータフレームからグループ化された値の間で操作を実行する方法

分類Dev

タイプ別にグループ化されたすべてのカウント値から最大データを検索するOracleクエリ

分類Dev

Rでマージされたデータテーブルから余分な行を見つける

分類Dev

SQLは、2つの同一のテーブル(異なるデータ)から人ごとにグループ化された最大日付を取得します

分類Dev

for ループから最大値を見つける

分類Dev

グループ化されたデータフレーム内で見つかったすべての値をカウントします

分類Dev

Rの整頓されたデータのグループ間で共通の変数を見つける

分類Dev

FileMakerでグループ内の最大値を見つける

分類Dev

与えられたデータで最大の正の数を見つけますか?

分類Dev

Javaで、入力された10個の値の最大値と最小値を見つけるためにforループを構成するにはどうすればよいですか。現在、このプログラムから出力されないものを受け取っています

分類Dev

Javaで、入力された10個の値の最大値と最小値を見つけるためにforループを構成するにはどうすればよいですか。現在、このプログラムから出力されないものを受け取っています

分類Dev

numpyの3D配列で最小値と最大値を見つけて、結果をグループ化するにはどうすればよいですか?

分類Dev

Python:データフレームを再構築し、事前定義された行を持つ特定の列からデータを再グループ化する

分類Dev

Rのグループ化されたデータで特定の観測の最後の発生を見つける方法は?

分類Dev

グループ化されたデータで上記のすべての行の合計を見つける方法は?

Related 関連記事

  1. 1

    Pythonでグループ化されたデータフレームの最小数を見つける方法

  2. 2

    Pythonでforループから生成された値の合計を見つける

  3. 3

    グループ化されたパンダリストで巡回最大値を見つける簡単な方法

  4. 4

    dplyrでグループ化された値の違いを見つける

  5. 5

    特定の列から最大値を見つけ、その後それらでグループ化します

  6. 6

    Rの整頓されたデータで複数のグループの平均値を見つける

  7. 7

    値でグループ化された最も頻繁な値を見つけるためのSQLクエリ

  8. 8

    「グループ化された」または「天国の」データを見つける方法は?

  9. 9

    Rでグループ化されたデータフレームのGAMから値を予測する

  10. 10

    間隔でグループ化された応答時間を見つける

  11. 11

    グループ化された変数で重複を見つける

  12. 12

    GWASでリードSNPを見つける-近接度でグループ化された行の最小値を見つける

  13. 13

    GWASでリードSNPを見つける-近接度でグループ化された行の最小値を見つける

  14. 14

    データフレームの値でフィルタリングされた行列の行から最小数を見つけますか?

  15. 15

    2つのデータフレームからグループ化された値の間で操作を実行する方法

  16. 16

    タイプ別にグループ化されたすべてのカウント値から最大データを検索するOracleクエリ

  17. 17

    Rでマージされたデータテーブルから余分な行を見つける

  18. 18

    SQLは、2つの同一のテーブル(異なるデータ)から人ごとにグループ化された最大日付を取得します

  19. 19

    for ループから最大値を見つける

  20. 20

    グループ化されたデータフレーム内で見つかったすべての値をカウントします

  21. 21

    Rの整頓されたデータのグループ間で共通の変数を見つける

  22. 22

    FileMakerでグループ内の最大値を見つける

  23. 23

    与えられたデータで最大の正の数を見つけますか?

  24. 24

    Javaで、入力された10個の値の最大値と最小値を見つけるためにforループを構成するにはどうすればよいですか。現在、このプログラムから出力されないものを受け取っています

  25. 25

    Javaで、入力された10個の値の最大値と最小値を見つけるためにforループを構成するにはどうすればよいですか。現在、このプログラムから出力されないものを受け取っています

  26. 26

    numpyの3D配列で最小値と最大値を見つけて、結果をグループ化するにはどうすればよいですか?

  27. 27

    Python:データフレームを再構築し、事前定義された行を持つ特定の列からデータを再グループ化する

  28. 28

    Rのグループ化されたデータで特定の観測の最後の発生を見つける方法は?

  29. 29

    グループ化されたデータで上記のすべての行の合計を見つける方法は?

ホットタグ

アーカイブ