我有一个看起来像这样的数据集:
ID WEEK TYPE TYPE_ADJ
1038 1.0 1.0 1.0
1038 13.0 3.0 3.0
1038 26.0 3.0 3.0
1038 38.0 3.0 3.0
1038 52.0 3.0 3.0
1043 1.0 1.0 1.0
1043 13.0 2.0 2.0
1043 26.0 2.0 2.0
1043 38.0 3.0 3.0
1043 52.0 1.0 1.0
我想要做的是,当 TYPE = 3.0 时,使 TYPE_ADJ 成为 TYPE 的最后一个非 3.0 值。即在上面的数据中,它将是:
ID WEEK TYPE TYPE_ADJ
1038 1.0 1.0 1.0
1038 13.0 3.0 1.0
1038 26.0 3.0 1.0
1038 38.0 3.0 1.0
1038 52.0 3.0 1.0
1043 1.0 1.0 1.0
1043 13.0 2.0 2.0
1043 26.0 2.0 2.0
1043 38.0 3.0 2.0
1043 52.0 1.0 1.0
我尝试了以下代码:
for id in df.ID.unique():
t = [1, 13, 26, 38, 52]
for n in [0, 1, 2, 3]:
prior_type = df.loc[(df.ID == id) & (df.WEEK == t[n]), 'TYPE']
if (df.loc[((df.ID == id) & (df.WEEK == t[n + 1])), 'TYPE'] == 3):
df.loc[(df.ID == id) & (df.WEEK == t[n + 1]), 'TYPE_ADJ'] = prior_type
我收到以下错误:
ValueError:系列的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。
我尝试添加空、布尔、项目、任何和所有,但它不起作用,而且 StackOverflow 上的所有答案似乎都不起作用。
您可以使用以下代码实现它:
df.loc[df["TYPE"] == 3, "TYPE_ADJ"] = None
df["TYPE_ADJ"].ffill(inplace=True)
代码删除TYPE_ADJ
,其中TYPE
等于 3,然后向前填充TYPE_ADJ
任何以前的非缺失值。
它采用TYPE
, not的最后一个值TYPE_ADJ
,但是在您的示例中它们是相同的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句