python-3.x - 通过从列表中获取列名来乘以数据框的列
问题描述
我有一个数据框,其中有分类列和数字列。
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
解决方案
您可以使用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
推荐阅读
- python - 检索列表中的字典项?Python
- sql - 使用 SQL Server 导入向导将 CSV 上传到表时出现日期错误
- python - 数据框值比较
- python - python完全限定域名
- ios - 如何让我的 Stripe 支付系统正常工作?
- java - 在 Junit Test 中异常 HashMap 返回 null 之后
- vue.js - Vuex 监视所有对象子属性
- python - 函数不断返回“nonetype”类型错误
- python - 替换 BeautifulSoup 列表中的元素文本
- linux - 如何在启动时运行 GStreamer(Aravissrc 和 AWS Kinesis Video Stream)