向具有不同行数的数据框添加列

时间:2019-03-27 18:24:58

标签: python python-3.x pandas

我正在尝试读取文件,并在具有相似列名的数据框中具有每个列的不同值。

文件有3列

EMP ID  DEPT    Salary
=============================
100 Sales   10000
200 MFG 10000
300 IT  10000
400 Sales   10000
500 MFG 10000
600 IT  10000

预期产量

EMP ID  DEPT    Salary
========================
100 Sales   10000
200 MFG 
300 IT  
400     
500     
600     

我已阅读文件,并获得了唯一值列表,如下所示

df=pd.read_csv('C:/Users/jaiveeru/Downloads/run_test1.csv')
cols=df.columns.tolist()
df1=pd.DataFrame()
df2=pd.DataFrame()
for i in cols:
    lst=df[i].unique().tolist()
    str1 = ','.join(lst)
    lst2=[str1]
    df1[i]=lst2
    df2=pd.concat([df2,df1])

但是每列可以具有不同数量的唯一值,但出现以下错误

ValueError:值的长度与索引的长度不匹配

1 个答案:

答案 0 :(得分:2)

可能有两种不同的版本,具体取决于您要如何对待唯一值。我将Salary中的EMPID=400设置为20,000来说明这一点。

  1. 在列上使用duplicated方法:
df[df.apply(lambda x: x.duplicated())] = np.nan
df = df.fillna('')

print(df)

输出:

   EMPID   DEPT Salary
0    100  Sales  10000
1    200    MFG       
2    300     IT       
3    400         20000
4    500              
5    600              
  1. 或者,如果您不想保留这些唯一值的索引,而希望将其收集在每一列的顶部:
df = pd.DataFrame(
    [df[x].unique() for x in df.columns],
    index=df.columns).T.fillna('')

print(df)

输出:

   EMPID   DEPT Salary
0  100.0  Sales  10000
1  200.0    MFG  20000
2  300.0     IT       
3  400.0              
4  500.0              
5  600.0              
相关问题