pandas apply 中f需要两个参数,(已解决)
本帖最后由 ymhld 于 2020-4-18 18:08 编辑import pandas as pd
chengji=[,,,,,]
data=pd.DataFrame(chengji,columns=['语文','类别','数学','政治'])
print(data.index,data.columns)
print(data,data.dtype())
data4=data.copy(deep=True)
data4=data4[['语文','数'+'学']]
#data4['数学评级']=0
data4['数学'+'评级']=data4['数'+'学'].apply(lambda x,y:x+y if x >=95else x-y,y='语文')
print("*"*50,"筛选数学大于95相加")
print(data4)
想让数学评级中 如果数学成绩大于95 与语文相加,如果小于95,减语文成绩,如何能做到
这只是个例子,真实的用途是判断某个值为0,则不做为除数
data2=data2['任务指标'+calname].apply(lambda x:0 if x==0
else data2/x*100) huyifan311 发表于 2020-4-18 15:56
热心回复
有啥好办法解决? 本帖最后由 ymhld 于 2020-4-18 16:30 编辑
def sum_test(a,b):
return a+b
data4['数学'+'评级']=data4.apply(lambda x: sum_test(x['语文'],x['数学']),axis=1)
网上找个例子,只能相加,这个没啥用,直接加也能出来数,不用这麻烦,不过这个倒是可以传递两列参数了
https://blog.csdn.net/maotianyi941005/article/details/84337586 # 想让数学评级中 如果数学成绩大于95 与语文相加,如果小于95,减语文成绩,如何能做到
def function(x):
if x['数学']>=95:
s=x['数学']+x['语文']
else:
s=x['数学']-x['语文']
return s
data['result']=data.apply(function,axis=1)
data Jack-lee 发表于 2020-4-18 16:48
# 想让数学评级中 如果数学成绩大于95 与语文相加,如果小于95,减语文成绩,如何能做到
def function(x): ...
chengji=[,,,,,]
如果是这个数据,想数学当成分母,语文当分子,如果判断数学不为零时再计算? Jack-lee 发表于 2020-4-18 16:48
# 想让数学评级中 如果数学成绩大于95 与语文相加,如果小于95,减语文成绩,如何能做到
def function(x): ...
chengji=[,,,,,]
data=pd.DataFrame(chengji,columns=['语文','类别','数学','政治'])
print(data.index,data.columns)
print(data,data.dtypes)
data4=data.copy(deep=True)
data4=data4[['语文','数'+'学']]
#data4['数学评级']=0
def sum_test(a,b):
return a+b
data4['数学'+'评级']=data4.apply(lambda x: sum_test(x['语文'],x['数学']),axis=1)
#df ['sum_value'] = df.apply(lambda x: sum_test(x['列名1'],x['列名2']), axis=1)
print("*"*50,"筛选数学大于95相加")
print(data4)
data4=data.copy(deep=True)
def function(x):
if x['数学']!=0:
s=x['语文']/x['数学']
else:
s=0
return s
data4['result']=data4.apply(function,axis=1)
print(data4) Jack-lee 发表于 2020-4-18 16:48
# 想让数学评级中 如果数学成绩大于95 与语文相加,如果小于95,减语文成绩,如何能做到
def function(x): ...
def div_test(x):
if x['任务指标'+calname]!=0:
s=x/x['任务指标'+calname]*100
else:
s=0
return s
for namelist in namelists:
print ('生成下属企业 %s 表'%namelist)
data2=totaldata1==namelist].copy() #不加。copy,会提示SettingWithCopyWarning:
calnames=['营业收入','营业成本','利润总额','三项费用']
for calname in calnames:
data2=0
#print('任务指标'+calname)
#data2==0,calname+'完成比例本月']=0
data2=data2.apply(div_test,axis=1)
因为列名中还有需要带的字符串参数,应该怎么处理呢? Jack-lee 发表于 2020-4-18 16:48
# 想让数学评级中 如果数学成绩大于95 与语文相加,如果小于95,减语文成绩,如何能做到
def function(x): ...
因为列名中还有需要带的字符串参数,应该怎么处理呢? Jack-lee 发表于 2020-4-18 16:48
# 想让数学评级中 如果数学成绩大于95 与语文相加,如果小于95,减语文成绩,如何能做到
def function(x): ...
data4=data.copy(deep=True)
data4['result']=0
data4.loc!=0,'result']=data4['语文']/data4['数学']
print(data4)
头大了,这样例子是可以用的,但引入字符串又出现错误了 Jack-lee 发表于 2020-4-18 16:48
# 想让数学评级中 如果数学成绩大于95 与语文相加,如果小于95,减语文成绩,如何能做到
def function(x): ...
感谢,我知道哪里出错了,是有个字符串定义没有弄好