我有一些数据框。 我想查找符合特定条件的行,并为这些行提供下一行的值。
示例:
我有以下df
>>> df = pd.DataFrame({"ID":range(1,11), "Label":["ABC","BBC","DAH","ACDC","CBA","DBS","HTG","PPP","HLM","AAA"]})
>>> df
ID Label
0 1 ABC
1 2 BBC
2 3 DAH
3 4 ACDC
4 5 CBA
5 6 DBS
6 7 HTG
7 8 PPP
8 9 HLM
9 10 AAA
我想将“标签”包含字母“ H”的行的ID更改为下一行的ID,因此它看起来像:
>>> df
ID Label
0 1 ABC
1 2 BBC
2 4 DAH
3 4 ACDC
4 5 CBA
5 6 DBS
6 8 HTG
7 8 PPP
8 10 HLM
9 10 AAA
我尝试过:
df.loc[df["Label"].str.contains("H"),"ID"] = df[df["Label"].str.contains("H").shift().fillna(False)]["ID"]
但是它将NaN而不是ID放入单元格
>>> df
ID Label
0 1.0 ABC
1 2.0 BBC
2 NaN DAH
3 4.0 ACDC
4 5.0 CBA
5 6.0 DBS
6 NaN HTG
7 8.0 PPP
8 NaN HLM
9 10.0 AAA
反正有这样做吗?最好排成一行(或至少不必逐行迭代)
答案 0 :(得分:0)
尝试将shift
与loc
一起使用,与您的尝试非常相似,但更简单:将ID
移1,其中Label
包含H
df.loc[df.Label.str.contains('H'),'ID'] = df.ID.shift(-1)
>>> df
ID Label
0 1.0 ABC
1 2.0 BBC
2 4.0 DAH
3 4.0 ACDC
4 5.0 CBA
5 6.0 DBS
6 8.0 HTG
7 8.0 PPP
8 10.0 HLM
9 10.0 AAA