熊猫数据框将列视图复制或追加到新行中

时间:2020-07-18 13:04:36

标签: pandas dataframe copy append

我正在努力将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'.

此方法的原因是,接收到的数据在列方面是可变的。即可以接收多个公司。

1 个答案:

答案 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')