gpt4 book ai didi

python - 在 Pandas 中用条件填充行

转载 作者:太空宇宙 更新时间:2023-11-03 15:31:26 25 4
gpt4 key购买 nike

输入数据:

df=pd.DataFrame({'A':['NBN 3','test text1','test text2','NBN 3.1 new text','test 
1','test 2']},columns=['A','B'])
print(df)
A B
0 NBN 3
1 test text1
2 test text2
3 NBN 3.1 new text
4 test 1
5 test 2

我需要创建由值df['B']= NBN 和数字填充的新列我想从这个 df 的上到下并按第一个 NBN 值填充行,直到下一个 NBN 值出现。

预期输出:

                  A  B
0 NBN 3 NBN 3
1 test text1 NBN 3
2 test text2 NBN 3
3 NBN 3.1 new text NBN 3.1
4 test 1 NBN 3.1
5 test 2 NBN 3.1

等等。

现在我只能用

df['B'] = df['A'].str.contains(r'^NBN\d|^NBN\d\.\d')

                  A      B
0 NBN 3 True
1 test text1 False
2 test text2 False
3 NBN 3.1 new text True
4 test 1 False
5 test 2 False

它会告诉我哪些行是 True 或 True。但我在按照我需要的方式填写时遇到问题。有什么帮助吗?谢谢!

最佳答案

使用Series.where用你的掩码和前向填充缺失值:

df['B'] =  df['A'].where(df['A'].str.contains('NBN')).ffill()

#your solution should be changed
#df['B'] = df['A'].where(df['A'].str.contains(r'^NBN \d|^NBN \d\.\d')).ffill()
print(df)

A B
0 NBN 3 NBN 3
1 test text1 NBN 3
2 test text2 NBN 3
3 NBN 3.1 NBN 3.1
4 test 1 NBN 3.1
5 test 2 NBN 3.1

另一种解决方案 Series.str.extract并转发缺失值:

df['B'] = df['A'].str.extract(r'^(NBN\s+\d\.\d|NBN\s+\d)', expand=False).ffill()

关于python - 在 Pandas 中用条件填充行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57691610/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com