簡體   English   中英

獲取 Python Pandas 中每一行中特定值的列名

[英]Get Column Name for specific value in each row in Python Pandas

我有下面的 dataframe 稱為 df:

ID 階段1 第二階段 第三階段
1 2022-02-01 2020-04-03 2022-06-07
--- ------------ ------------ ------------
2 2023-06-07 2020-03-01 2020-09-03
--- ------------ ------------ ------------
3 2023-02-04 2023-06-07 2022-06-07

我需要計算每個 ID 及其各自階段的最大日期。 所以對於訂單 1、2、3,我需要的階段分別是階段 3、階段 1 和階段 2。 我首先使用以下代碼計算每行中的最大日期來開始此過程:

df2 = df[['Stage1', 'Stage2', 'Stage3', 'Stage4', 'Stage5']]
lis = list(df2.max(axis=1))

lis 變量具有為每一行存儲的最大日期。 現在,對於每個最大日期,我需要獲取該行的階段名稱。

下面的代碼計算整個 df 而不是行的最大階段。

new_lis = []
for i in lis:
    new_lis.append(df.columns[df.isin([i]).any()])

我該如何解決? Output 我需要分別是訂單 1、2、3 的“第 3 階段”、“第 1 階段”和“第 2 階段”。

讓我們試試idxmax(axis=1)

out = (df.filter(like='Stage')
       .apply(pd.to_datetime)
       .idxmax(axis=1))
print(out)

0    Stage3
1    Stage1
2    Stage2
dtype: object

如果您的階段列包含整行的 NaT,則可以刪除此行

out = (df.filter(like='Stage')
       .apply(pd.to_datetime)
       .dropna(how='all')
       .idxmax(axis=1))
input dataframe

   Id      Stage1      Stage2      Stage3
0   1  2022-02-01  2020-04-03  2022-06-07
1   2  2023-06-07  2020-03-01  2020-09-03
2   3  2023-02-04  2023-06-07  2022-06-07
3   4         NaN         NaN         NaN
4   5         NaT  2023-06-07  2022-06-07

output dataframe, note the index 3 is dropped

0    Stage3
1    Stage1
2    Stage2
4    Stage2
dtype: object

暫無
暫無

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

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