pandas 将多个列与管道连接在一起,同时跳过空值
pandas concatenate multiple columns together with pipe while skip the empty values
嗨,我想在 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)
谁能帮我解决这个问题?
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)
您可以使用 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))
嗨,我想在 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)
谁能帮我解决这个问题?
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)
您可以使用 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))