簡體   English   中英

PANDAS groupby 2列有條件

[英]PANDAS groupby 2 columns with condition

我有一個數據框,我需要按 2 列分組並根據條件創建一個新列。 我的數據如下所示:

ID 星期 day_num
1個 1個 2個
1個 1個 3個
1個 2個 4個
1個 2個 1個
2個 1個 1個
2個 2個 2個
3個 1個 4個

我需要按列 ID 和周進行分組,因此每周每個 ID 都有一行。 groupby 是基於條件的——如果某周某個 ID 在 day_num 列中的值為 1,則該值在 groupby 下將為 1,否則為 0。例如,ID 1 在兩行下都有 2 和 3,因此它等於 0 groupby,對於第 2 周 ID 1,它有一行值為 1,因此為 1。

我需要的 output 如下所示:

ID 星期 第一天
1個 1個 0
1個 2個 1個
2個 1個 1個
2個 2個 0
3個 1個 0

我搜索並找到了這段代碼,但是它使用了計數,我只需要在其中寫入值 1 或 0 即可。

df1=df1.groupby('ID','week')['day_num'].apply(lambda x: (x=='1').count())

有沒有辦法做到這一點?

謝謝!

您可以從另一種方式進行處理:在“day_num”中檢查是否與 1 相等,然后按 ID 和周對其進行分組。 然后與any聚合以查看組中是否有任何 1。 最后將 True/Falses 轉換為 1/0 並將石斑魚移至列。

df["day_num"].eq(1).groupby([df["ID"], df["week"]]).any().astype(int).reset_index()

   ID  week  day_num
0   1     1        0
1   1     2        1
2   2     1        1
3   2     2        0
4   3     1        0
import pandas as pd

src = pd.DataFrame({'ID': [1, 1, 1, 1, 2, 2, 3],    
                    'week': [1, 1, 2, 2, 1, 2, 1],    
                    'day_num': [2, 3, 4, 1, 1, 2, 4],
                    })


src['day_num'] = (~(src['day_num']-1).astype(bool)).astype(int)
r = src.sort_values(by=['day_num']).drop_duplicates(['ID', 'week'], keep='last').sort_index().reset_index(drop=True)
print(r)

結果

   ID  week  day_num
0   1     1        0
1   1     2        1
2   2     1        1
3   2     2        0
4   3     1        0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM