我有一個包含 nstore列的資料框,這里我只顯示前 2 個:
ref_id store_0 store_1
0 100 c b
1 300 d NaN
我想要一種方法,只將列中的非 NaN 值連接store到一個新列中,在每個值之間添加一個逗號,最后洗掉這些列。期望的輸出是:
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
uj5u.com熱心網友回復:
嘗試
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
uj5u.com熱心網友回復:
您可以使用:
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
uj5u.com熱心網友回復:
你可以試試
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/477610.html
標籤:python-3.x 熊猫 级联
