我有一个具有以下形状的数据框架:
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]但在此之后,数据框架看起来是一样的,但不确定原因。我的想法是将值传递给相应的列,然后按":“拆分并重命名这些列。我如何实现这一点?
发布于 2022-05-17 08:37:28
通过:和枢轴分割值的通用解决方案--先由DataFrame.stack创建Series,然后由Series.str.splitSeries.str.rsplit拆分,最后由DataFrame.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发布于 2022-05-17 08:37:37
以下是处理任意数量的列的一种方法:
(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 227https://stackoverflow.com/questions/72270689
复制相似问题