【问题标题】:Creating a Column List based off Conditions of Multiple Columns根据多列的条件创建列列表
【发布时间】:2021-08-24 19:21:15
【问题描述】:

我有一个包含与不同年份相关的数字的数据集(如下):

      2021_Sales     2022_Sales     2023_Sales     2024_Sales     2025_Sales     
0              0             19             36             35              0                
1             83             62              0              0              0
2              0              0              0              0             58
3            112              7              0              0              0
4              0              0              0              0             37

我想创建一个列 Active Years 列出销售额大于 0 的年份。生成的 df 将如下所示。我希望结果列是一个列表,这样我就可以按年份过滤数据集。

      2021_Sales     2022_Sales     2023_Sales     2024_Sales     2025_Sales        Active Years
0              0             19             36             35              0        2022,2023,2024 
1             83             62              0              0              0        2021,2022 
2              0              0              0              0             58        2025 
3            112              7              0              0              0        2021, 2022 
4              0              0              0              0             37        2025

我尝试了各种 np.where 和 np.select 方法,但都找不到解决方案。

感谢您的帮助

【问题讨论】:

    标签: python pandas list filter


    【解决方案1】:
    df["Active Years"] = df.filter(regex=r"\d{4}_Sales").apply(
        lambda x: ",".join(x[x > 0].index.str.split("_").str[0]), axis=1
    )
    print(df)
    

    打印:

       2021_Sales  2022_Sales  2023_Sales  2024_Sales  2025_Sales    Active Years
    0           0          19          36          35           0  2022,2023,2024
    1          83          62           0           0           0       2021,2022
    2           0           0           0           0          58            2025
    3         112           7           0           0           0       2021,2022
    4           0           0           0           0          37            2025
    

    或者如果你想要一个列表:

    df["Active Years"] = df.filter(regex=r"\d{4}_Sales").apply(
        lambda x: x[x > 0].index.str.split("_").str[0].tolist(), axis=1
    )
    print(df)
    

    打印:

       2021_Sales  2022_Sales  2023_Sales  2024_Sales  2025_Sales        Active Years
    0           0          19          36          35           0  [2022, 2023, 2024]
    1          83          62           0           0           0        [2021, 2022]
    2           0           0           0           0          58              [2025]
    3         112           7           0           0           0        [2021, 2022]
    4           0           0           0           0          37              [2025]
    

    【讨论】:

      【解决方案2】:

      您可以获取df中每一行的销售额大于零的每一年的索引。

      df['Active Years'] = [np.arange(2021, 2026)[np.array(i)] for i in (df > 0).values]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多