识别重复项并使用python在其透视列中排列相应的数据



我有一个CSV文件,其中包含多个重复条目。我想做的是,我需要收集那些重复的字段,并排列它们对应的字段。

我的桌子:

C列>D列
A列 B列
1004.
1004。 3
1004。 2

您可以使用lambda函数。首先,我们按列A分组:

df=pd.DataFrame(data={'col_a':[1004,1004,1004,1005],'col_b':[1,3,2,2],'col_c':['','','',''],'col_d':['','','','']})
df=df.replace(r'^s*$',np.nan,regex=True) #replace empty cells with nan
dfx=df.groupby('col_a').agg(list)
print(dfx)
col_a   col_b       col_c           col_d
1004    [1, 3, 2]   [nan, nan, nan] [nan, nan, nan]
1005    [2]         [nan]           [nan]

如果有多个列,则可以替换nan值​​根据值的索引号​​在列表中:

dfx['col_c']=dfx['col_b'].apply(lambda x: x[1] if len(x) > 1 else np.nan) #get the second value from col_b
dfx['col_d']=dfx['col_b'].apply(lambda x: x[2] if len(x) > 2 else np.nan) #get the third value from col_b
dfx['col_b']=dfx['col_b'].apply(lambda x: x[0] if len(x) > 0 else np.nan) #finally replace col_b with its first value (col_b must be replaced last) 

注意:如果我们先替换col_b,我们将丢失该列表。这就是我们最后替换col_b的原因。

如果有很多列,我们可以使用for循环:

loop_cols=[*dfx.columns[1:]] # get the list of columns except col_b.
list_index=1
list_lenght=1
for i in loop_cols:
dfx[i]=dfx['col_b'].apply(lambda x: x[list_index] if len(x) > list_lenght else np.nan)
list_index+=1
list_lenght+=1
#finally, replace col_b.
dfx['col_b']=dfx['col_b'].apply(lambda x: x[0] if len(x) > 0 else np.nan)

输出:

col_a   col_b   col_c   col_d
1004    1       3.0     2.0
1005    2       

相关内容

  • 没有找到相关文章

最新更新