Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 基于字典的键创建新列?_Python_Pandas_String Literals_Data Wrangling - Fatal编程技术网

Python 基于字典的键创建新列?

Python 基于字典的键创建新列?,python,pandas,string-literals,data-wrangling,Python,Pandas,String Literals,Data Wrangling,我试图在使用字符串文字和键的for字典项循环中的dataframe中创建一个新列,但它会抛出一条“ValueError:无法设置没有定义索引和标量的帧”错误消息 exp类别的字典定义 基于主数据帧创建新数据帧 mcon=VA.loc[:,['Expense','Mgrl','Exp Category','Parent Category'] mcon.loc[:,'Variance Type']=['如果x

我试图在使用字符串文字和键的for字典项循环中的dataframe中创建一个新列,但它会抛出一条“ValueError:无法设置没有定义索引和标量的帧”错误消息

exp类别的字典定义 基于主数据帧创建新数据帧
mcon=VA.loc[:,['Expense','Mgrl','Exp Category','Parent Category']
mcon.loc[:,'Variance Type']=['如果x<0,则为'不利';对于mcon中的x,则为'有利'['Mgrl']]
mcon.loc[:,“业务部门”]=“管理层合并”
mcon=mcon[['业务单元','支出类别','上级类别','费用','经理','差异类型']]
重命名(列={'Mgrl':'Variance'},inplace=True)
创建最终将写入excel的新数据框
a1=pd.DataFrame()
对于键,d.items()中的值:
umconm=mcon.iloc[value]。查询('Variance<0')。nsmallest(5,'Variance'))
fmconm=mcon.iloc[value]。查询('Variance>0')。nlargest(5,'Variance')
如果umconm.empty==False或fmconm.empty==False:
a1=pd.concat([a1,umconm,fmconm],忽略索引=True)
其他:
持续
a1.to_csv('example.csv',index=False)
输出如下所示

我试图添加一个新的列,该列显示高于/低于{key}的预算,其中key表示使用以下代码的费用类型
对于键,d.items()中的值:
umconm=mcon.iloc[value]。查询('Variance<0')。nsmallest(5,'Variance'))
umconm.loc[:,“解释”]=f“低于预算{key}”
fmconm=mcon.iloc[value]。查询('Variance>0')。nlargest(5,'Variance')
fmconm.loc[:,“解释”]=f“高于预算{key}”
如果umconm.empty==False或fmconm.empty==False:
a1=pd.concat([a1,umconm,fmconm],忽略索引=True)
其他:
持续
但是使用上面的字符串文字会给我错误消息“ValueError:无法设置没有定义索引和标量的帧”


如果您能帮我纠正这个问题,或者找到一个不同的解决方案,将这个字段添加到我的数据帧中,我将不胜感激。提前谢谢

我真傻,解决办法如下:

for key, value in d.items():
    umconm = mcon.iloc[value].query('Variance < 0').nsmallest(5, 'Variance')
    umconm['Explanation'] = f'Higher than Budget for {key}'
    fmconm = mcon.iloc[value].query('Variance > 0').nlargest(5, 'Variance')
    fmconm['Explanation'] = f'Lower than Budget for {key}'
    if umconm.empty == False or fmconm.empty == False:
        a1 = pd.concat([a1,umconm,fmconm], ignore_index = True)
    else:
        continue
对于键,d.items()中的值:
umconm=mcon.iloc[value]。查询('Variance<0')。nsmallest(5,'Variance'))
umconm['explainion']=f'高于{key}的预算'
fmconm=mcon.iloc[value]。查询('Variance>0')。nlargest(5,'Variance')
fmconm['explainion']=f'低于{key}的预算'
如果umconm.empty==False或fmconm.empty==False:
a1=pd.concat([a1,umconm,fmconm],忽略索引=True)
其他:
持续

在这个数据框中创建新列时,我不必使用.loc

我真傻,解决办法如下:

for key, value in d.items():
    umconm = mcon.iloc[value].query('Variance < 0').nsmallest(5, 'Variance')
    umconm['Explanation'] = f'Higher than Budget for {key}'
    fmconm = mcon.iloc[value].query('Variance > 0').nlargest(5, 'Variance')
    fmconm['Explanation'] = f'Lower than Budget for {key}'
    if umconm.empty == False or fmconm.empty == False:
        a1 = pd.concat([a1,umconm,fmconm], ignore_index = True)
    else:
        continue
对于键,d.items()中的值:
umconm=mcon.iloc[value]。查询('Variance<0')。nsmallest(5,'Variance'))
umconm['explainion']=f'高于{key}的预算'
fmconm=mcon.iloc[value]。查询('Variance>0')。nlargest(5,'Variance')
fmconm['explainion']=f'低于{key}的预算'
如果umconm.empty==False或fmconm.empty==False:
a1=pd.concat([a1,umconm,fmconm],忽略索引=True)
其他:
持续

在这个数据框中创建新列时,我不必使用.loc

发生此错误是因为该行

umconm = mcon.iloc[value].query('Variance < 0').nsmallest(5, 'Variance')

发生此错误的原因是该行

umconm = mcon.iloc[value].query('Variance < 0').nsmallest(5, 'Variance')

谢谢你的回复!这是有道理的,我只是试着不使用.loc,它起作用了,但不知道为什么它比另一个有效,但现在它有了意义。非常感谢。谢谢你的回复!这是有道理的,我只是试着不使用.loc,它起作用了,但不知道为什么它比另一个有效,但现在它有了意义。非常感谢。
for key, value in d.items():
    umconm = mcon.iloc[value].query('Variance < 0').nsmallest(5, 'Variance')
    umconm['Explanation'] = f'Higher than Budget for {key}'
    fmconm = mcon.iloc[value].query('Variance > 0').nlargest(5, 'Variance')
    fmconm['Explanation'] = f'Lower than Budget for {key}'
    if umconm.empty == False or fmconm.empty == False:
        a1 = pd.concat([a1,umconm,fmconm], ignore_index = True)
    else:
        continue
umconm = mcon.iloc[value].query('Variance < 0').nsmallest(5, 'Variance')
a['Explanation'] = f'Lower than budgeted {key}'