在不包括 NaN 的数据框列上连接值
Concat values on dataframe columns excluding NaN's
我有一个包含 n store
列的数据框,这里我只显示前 2 个:
ref_id store_0 store_1
0 100 c b
1 300 d NaN
我想要一种方法,仅将 store
列中的非 NaN 值连接到一个新列中,在每个值之间添加一个逗号,最后删除这些列。期望的输出是:
ref_id stores
0 100 c,b
1 300 d
现在我已经尝试 df['stores'] = df['store_0'] + ',' + df['store_1']
这个结果:
ref_id store_0 store_1 stores
0 100 c b c,b
1 300 d NaN NaN
试试
df['store'] = df.filter(like = 'store').apply(lambda x : ','.join(x[x==x]),1)
df
Out[60]:
ref_id store_0 store_1 store
0 100 c b c,b
1 300 d NaN d
您可以使用:
cols = df.filter(like='store_').columns
df2 = (df
.drop(columns=cols)
.assign(stores=df[cols].agg(lambda s: s.dropna()
.str.cat(sep=','),
axis=1))
)
或者,对于就地修改:
cols = df.filter(like='store_').columns
df['stores'] = df[cols].agg(lambda s: s.dropna().str.cat(sep=','), axis=1)
df.drop(columns=cols, inplace=True)
输出:
ref_id stores
0 100 c,b
1 300 d
你可以试试
df_ = df.filter(like='store')
df = (df.assign(store=df_.apply(lambda row : row.str.cat(sep=','), axis=1))
.drop(df_.columns, axis=1))
print(df)
ref_id store
0 100 c,b
1 300 d
我有一个包含 n store
列的数据框,这里我只显示前 2 个:
ref_id store_0 store_1
0 100 c b
1 300 d NaN
我想要一种方法,仅将 store
列中的非 NaN 值连接到一个新列中,在每个值之间添加一个逗号,最后删除这些列。期望的输出是:
ref_id stores
0 100 c,b
1 300 d
现在我已经尝试 df['stores'] = df['store_0'] + ',' + df['store_1']
这个结果:
ref_id store_0 store_1 stores
0 100 c b c,b
1 300 d NaN NaN
试试
df['store'] = df.filter(like = 'store').apply(lambda x : ','.join(x[x==x]),1)
df
Out[60]:
ref_id store_0 store_1 store
0 100 c b c,b
1 300 d NaN d
您可以使用:
cols = df.filter(like='store_').columns
df2 = (df
.drop(columns=cols)
.assign(stores=df[cols].agg(lambda s: s.dropna()
.str.cat(sep=','),
axis=1))
)
或者,对于就地修改:
cols = df.filter(like='store_').columns
df['stores'] = df[cols].agg(lambda s: s.dropna().str.cat(sep=','), axis=1)
df.drop(columns=cols, inplace=True)
输出:
ref_id stores
0 100 c,b
1 300 d
你可以试试
df_ = df.filter(like='store')
df = (df.assign(store=df_.apply(lambda row : row.str.cat(sep=','), axis=1))
.drop(df_.columns, axis=1))
print(df)
ref_id store
0 100 c,b
1 300 d