嗨,我想在 pandas python 中使用管道作為連接器將多個列連接在一起,如果這些列是空白值,則跳過這些列。
我嘗試了以下代碼,當它為空時它不會跳過值,它仍然會有一個'|' 要與其他欄位連接,我想要的是完全通過空欄位..
例如:目前它給了我'N|911|WALLACE|AVE||||MT|031|000600'
而我想要'N|911|WALLACE|AVE|MT|031|000600'
df['key'] = df[['fl_predir','fl_prim_range','fl_prim_name','fl_addr_suffix','fl_postdir','fl_unit_desig','fl_sec_range','fl_st','fl_fips_county','blk']].agg('|'.join, axis=1)
有人可以幫我嗎?
uj5u.com熱心網友回復:
cols = ['fl_predir','fl_prim_range','fl_prim_name','fl_addr_suffix','fl_postdir','fl_unit_desig','fl_sec_range','fl_st','fl_fips_county','blk']
df['key'] = df[cols].apply(lambda row: '|'.join(x for x in row if x), axis=1, raw=True)
uj5u.com熱心網友回復:
您可以使用melt扁平化資料框,洗掉空值,然后按索引分組,最后連接值:
cols = ['fl_predir', 'fl_prim_range', 'fl_prim_name', 'fl_addr_suffix' ,
'fl_postdir', 'fl_unit_desig', 'fl_sec_range', 'fl_st',
'fl_fips_county', 'blk']
df['key'] = (df[cols].melt(ignore_index=False)['value'].dropna()
.astype(str).groupby(level=0).agg('|'.join))
輸出:
>>> df['key']
0 N|911|WALLACE|AVE|MT|31|600
Name: key, dtype: object
替代品( Pandas < 1.1.0)
df['keys'] = (df[cols].unstack().dropna().astype(str)
.groupby(level=1).agg('|'.join))
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/472478.html
