我有一个数据集,其中载有与不同年份有关的数字(见下文):
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方法,但一直无法找到解决方案。
谢谢你的帮忙
发布于 2021-06-07 17:30:34
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]发布于 2021-06-07 17:43:14
您可以获得df中每行销售额大于零的年度索引。
df['Active Years'] = [np.arange(2021, 2026)[np.array(i)] for i in (df > 0).values]https://stackoverflow.com/questions/67876170
复制相似问题