我有一个数据框,其中有分类列和数字列。
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 Total','2017 Total','2018 Total','2019 Total']
我正在尝试确定相乘时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
答案 0 :(得分:3)
您可以使用df.filter()
来过滤具有Total
的列(与您的cols_list
类似的结果),然后在axis=1
上使用df.prod()
,然后使用{{1 }}:
s.map()
答案 1 :(得分:3)
将numpy.where
和DataFrame.prod
的条件与{{1}一起使用Series.lt
:
<0
答案 2 :(得分:1)
尝试一下:
df['Negative'] = df[cols_list].T.product().apply(lambda x: x < 0)
那里的df[cols_list].T
将列转置为行。这样,我们可以将product
用作行(熊猫可以通过一个函数调用来完成)。
分步操作:
>>> t = df[cols_list].T
>>> t
0 1 2
2016 10 10 10
2017 20 20 20
2018 30 30 30
>>> p = t.product()
>>> p
0 6000
1 6000
2 6000
dtype: int64
>>> neg = p.apply(lambda x: x < 0)
>>> neg
0 False
1 False
2 False
dtype: bool