我有一個具有以下形狀的資料框:
0 1
0 OTT:81 DVBC:398
1 OTT:81 DVBC:474
2 OTT:81 DVBC:474
3 OTT:81 DVBC:454
4 OTT:81 DVBC:443
5 OTT:1 DVBC:254
6 DVBC:151 None
7 OTT:1 DVBC:243
8 OTT:1 DVBC:254
9 DVBC:227 None
如果第 1 列包含“DVBC”,我希望第 1 列與第 0 列相同。拆分“:”上的值并用 0 填充空值。結束資料框應如下所示
OTT DVBC
0 81 398
1 81 474
2 81 474
3 81 454
4 81 443
5 1 254
6 0 151
7 1 243
8 1 254
9 0 227
我嘗試從以下開始:
if df[0].str.contains("DVBC") is True:
df[1] = df[0]
但在此之后,資料框看起來一樣,不知道為什么。之后我的想法是將值傳遞給相應的列,然后用“:”分割并重命名這些列。我該如何實施?
uj5u.com熱心網友回復:
拆分值:和旋轉的通用解決方案 - 首先創建Series,DataFrame.stack拆分和最后重塑:Series.str.splitSeries.str.rsplitDataFrame.pivot
df = df.stack().str.split(':', expand=True).reset_index()
df = df.pivot('level_0',0,1).fillna(0).rename_axis(index=None, columns=None)
print (df)
DVBC OTT
0 398 81
1 474 81
2 474 81
3 454 81
4 443 81
5 254 1
6 151 0
7 243 1
8 254 1
9 227 0
uj5u.com熱心網友回復:
這是一種適用于任意數量列的方法:
(df
.apply(lambda c: c.str.extract(':(\d )', expand=False))
.ffill(axis=1)
.mask(df.replace('None', pd.NA).isnull().shift(-1, axis=1, fill_value=False), 0)
)
輸出:
OTT DVBC
0 81 398
1 81 474
2 81 474
3 81 454
4 81 443
5 1 254
6 0 151
7 1 243
8 1 254
9 0 227
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/476247.html
下一篇:Do-while或while回圈將繼續從用戶那里獲取輸入,但在我用c語言輸入字串“exit”(不區分大小寫)后將終止
