pandas 如何向后迭代 Dataframe 直到满足指定条件,然后用新值继续迭代?

oxosxuxt  于 2023-02-02  发布在  其他
关注(0)|答案(2)|浏览(116)

我有一个Pandas Dataframe 列叫做"元素"。它的值中有长度为9或7的数字。 Dataframe 的第一行总是有9个数字,最后一行总是有7个数字。
示例:

{element:[120000000, 8000000, 120003000, 7000000, 120003333, 120003444, 5000000]

我想创建另一个名为"assigned"的列。该列必须赋值,从 Dataframe 的后面开始,从列"element"中获取7数值,直到它满足9数值。然后使用它上次使用的7数值,并转到一个新行开始使用下一个7数值。
下面是一个例子:

{element:[120000000, 8000000, 120003000, 7000000, 120003333, 120003444, 5000000]}
{assigned:[8000000, 8000000, 7000000, 7000000, 5000000, 5000000, 5000000]}

老实说,我卡住了,不知道该怎么做。

bvjxkvbb

bvjxkvbb1#

使用Series.where100000000等较大值替换为缺失值,然后回填下一个值,最后转换为整数:

df['assigned'] = df['element'].where(df['element'].lt(100000000)).bfill().astype(int)
print (df)
     element  assigned
0  120000000   8000000
1    8000000   8000000
2  120003000   7000000
3    7000000   7000000
4  120003333   5000000
5  120003444   5000000
6    5000000   5000000
mwkjh3gx

mwkjh3gx2#

一个选项是将str.lenbfill一起使用:

#is it a 7-digit number ?
m = df["element"].astype(str).str.len().eq(7)
​
df["assigned"] = df["element"].where(m).bfill(downcast="infer")

输出:

print(df)

     element  assigned
0  120000000   8000000
1    8000000   8000000
2  120003000   7000000
3    7000000   7000000
4  120003333   5000000
5  120003444   5000000
6    5000000   5000000

相关问题