我正在努力将DataFrame视图的副本附加到另一个数据帧的新行中。
在下表中:
Description, Item Number, Company A, Company B, Company C
Assets, 1, 100000, 50000, 20000
Liabilities, 2, 80000, 10000, 15000
我想重新创建为
Description, Item Number, Company, Value
Assets, 1, Company A, 100000
Liabilities, 2, Company A, 80000
Assets, 1, Company B, 50000
Liabilities, 2, Company B, 10000
Assets, 1, Company C, 20000
Liabilities, 2, Company C, 15000
使用的代码
ll=list(range(2,df.shape[1]))
retobj = pd.DataFrame(columns=[df.columns[0:2]]) #create dataframe to return
for item in ll:
nl=[0,1]
nl.append(item)
tdf=df.iloc[:,nl].copy() #tdf-temporary data frame
prevheading=tdf.columns[-1]
tdf.rename(columns = {prevheading:'Value'}, inplace=True)
tdf['Company'] = prevheading
retobj.append(tdf)
它正确地复制了第一家公司,但是由于以下错误而失败:AttributeError: 'NoneType' object has no attribute 'is_extension'.
此方法的原因是,接收到的数据在列方面是可变的。即可以接收多个公司。
答案 0 :(得分:0)
Actions > Deploy API
使用df.melt
对此很有用:
id_vars
哪个给:
from io import StringIO
import pandas as pd
csv = '''\
Description, Item Number, Company A, Company B, Company C
Assets, 1, 100000, 50000, 20000
Liabilities, 2, 80000, 10000, 15000
'''.replace(' ', '')
df = pd.read_csv(StringIO(csv))
df_new = df.melt(id_vars=['Description', 'ItemNumber'],
var_name='Company,
value_name='Value')