繁体   English   中英

应用函数中的动态数据框列名

[英]Dynamic dataframe column name in apply function

我正在使用当前的数据框:

df = pd.DataFrame({'columnA':[1111,1111,2222,3333,4444,4444,5555,6666],
                   'columnB':['AAAA','AAAA','BBBB','AAAA','BBBB','BBBB','AAAA','BBBB'],
                   'columnC':['one','two','one','one','one','sales','two','one'],
                   'NUM1':[1,3,5,7,1,0,4,5],
                   'NUM2':[5,3,6,9,2,4,1,1],
                   'W':list('aaabbbbb')})

我正在尝试在以下代码中使用动态列:

#First aggregate the data
d = {'columnB':'unique', 'columnC':'unique' }
df2 = df.groupby('columnA').agg(d)


#Convert list to string for each cell of the inventory field
mylist = ["columnB","columnC"]
for x in mylist:
    columnName = x
    #print("df2."+columnName+".apply(', '.join)")
    df2[columnName] = df2[columnName].apply(', '.join)

它在 Jupyter 中运行良好。 我的问题是当我在 Visualstudio 上运行它时它不起作用。 我收到此错误:

序列项 0:预期的 str 实例,找到浮点数

打印数据框的类型后,我得到了这个:

<class 'pandas.core.frame.DataFrame'>

这是完整的错误消息:

回溯(最近一次调用):文件“stage1.py”,第 112 行,在 main() 文件“stage1.py”,第 57 行,在主 templateScenarios[columnName] = templateScenarios[columnName].apply(', '.加入) 文件“/Users/apolo.siskos/anaconda3/lib/python3.6/site-packages/pandas/core/series.py”,第 2355 行,在应用中映射 = lib.map_infer(values, f, convert=convert_dtype ) 文件“pandas/_libs/src/inference.pyx”,第 1574 行,在 pandas._libs.lib.map_infer 类型错误:序列项 0:预期的 str 实例,找到浮点数

NaN值存在问题,因此可以通过dropna删除它们并使用带有join自定义函数:

df = pd.DataFrame({'columnA':[1111,1111,2222,3333,4444,4444,5555,6666],
                   'columnB':[np.nan,np.nan,'BBBB','AAAA','BBBB','BBBB','AAAA','BBBB'],
                   'columnC':['one','two','one','one','one','sales','two','one'],
                   'NUM1':[1,3,5,7,1,0,4,5],
                   'NUM2':[5,3,6,9,2,4,1,1],
                   'W':list('aaabbbbb')})

f = lambda x: ', '.join(x.dropna().unique())
d = {'columnB': f, 'columnC':f}
df2 = df.groupby('columnA').agg(d)
print (df2)
        columnB     columnC
columnA                    
1111               one, two
2222       BBBB         one
3333       AAAA         one
4444       BBBB  one, sales
5555       AAAA         two
6666       BBBB         one

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM