首页 > 解决方案 > 通过从列表中获取列名来乘以数据框的列

问题描述

我有一个数据框,其中有分类列和数字列。

data = [['A',"India",10,20,30,15,"Cochin"],['B',"India",10,20,30,40,"Chennai"],['C',"India",10,20,30,15,"Chennai"]]
df = pd.DataFrame(data,columns=['Product','Country',"2016 Total","2017 Total","2018 Total","2019 Total","Region"])

Product Country 2016 Total  2017 Total  2018 Total  2019 Total  Region
0   A   India   10           20          30          15         Cochin
1   B   India   10           20          30          40         Chennai
2   C   India   10           20          30          15         Chennai

我知道数值变量列的名称是什么(需要动态捕获):

start_year = 2016
current_year = datetime.datetime.now().year
previous_year = current_year - 1 
print(current_year)

year_list = np.arange(start_year, current_year+1, 1)

cols_list = []
for i in year_list:
    if i <= current_year:
        cols = str(i)+" Total"
        cols_list.append(cols)
cols_list

['2016 年总计'、'2017 年总计'、'2018 年总计'、'2019 年总计']

我试图确定相乘时 cols_list 列中的值是否为负

如何在熊猫中做到这一点?我无法弄清楚如何遍历 cols_list 并从数据框中提取列并相乘

预期输出:

Product Country 2016 Total  2017 Total  2018 Total  2019 Total  Region  Negative
    0   A   India   10           20          30          15     Cochin No
    1   B   India   10           20          30          40    Chennai No
    2   C   India   10           20          30          15    Chennai No

标签: python-3.xpandasdataframe

解决方案


您可以使用df.filter()过滤具有Total(与您的结果相似cols_list)的列,然后使用df.prod()over axis=1,然后s.map()

df['Negative']=df.filter(like='Total').prod(axis=1).lt(0).map({True:'Yes',False:'No'})
print(df)

  Product Country  2016 Total  2017 Total  2018 Total  2019 Total   Region  \
0       A   India          10          20          30          15   Cochin   
1       B   India          10          20          30          40  Chennai   
2       C   India          10          20          30          15  Chennai   

  Negative  
0       No  
1       No  
2       No 

推荐阅读