首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据多列的条件创建列列表

根据多列的条件创建列列表
EN

Stack Overflow用户
提问于 2021-06-07 17:25:51
回答 2查看 37关注 0票数 1

我有一个数据集,其中载有与不同年份有关的数字(见下文):

代码语言:javascript
复制
      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如下所示。我希望结果列是一个列表,这样我就可以按年过滤数据集。

代码语言:javascript
复制
      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方法,但一直无法找到解决方案。

谢谢你的帮忙

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-06-07 17:30:34

代码语言:javascript
复制
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)

指纹:

代码语言:javascript
复制
   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

或者如果你想要一份清单:

代码语言:javascript
复制
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)

指纹:

代码语言:javascript
复制
   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]
票数 1
EN

Stack Overflow用户

发布于 2021-06-07 17:43:14

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

代码语言:javascript
复制
df['Active Years'] = [np.arange(2021, 2026)[np.array(i)] for i in (df > 0).values]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67876170

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档