【问题标题】:Add (and calculate) rows to dataframe until condition is met:向数据框添加(并计算)行,直到满足条件:
【发布时间】:2016-04-29 08:04:23
【问题描述】:

我正在尝试构建一个数据框,该数据框将一列中的前一行加 1,直到满足条件。在这种情况下,我想继续添加行,直到列 'AGE' = 100。

import pandas as pd
import numpy as np


RP = {'AGE' : pd.Series([10]), 
      'SI' : pd.Series([60])}

RPdata = pd.DataFrame(RP)


i = RPdata.tail(1)['AGE']

RPdata2 = pd.DataFrame()

while [i < 100]:
    RPdata2['AGE'] = i + 1

    RPdata2['SI'] = RPdata.tail(1)['SI']    

    RPdata = pd.concat([RPdata, RPdata2], axis = 0)
    break

print RPdata

结果

    Age    SI
0   10     60
0   11     60

我知道 break 语句可以防止多次迭代,但没有它,循环似乎是无限的。

我正在努力实现:

    Age    SI
0   10     60
0   11     60
0   12     60
0   13     60
0   14     60
.   .      60
0  100     60

有没有办法用一个while循环来完成这个?我应该改用 for 循环解决方案吗?

【问题讨论】:

    标签: python loops numpy pandas while-loop


    【解决方案1】:

    可能还有其他问题,但您将陷入while [i &lt; 100]: 的无限循环,因为非空列表将始终评估为 True。将其更改为 while (i &lt; 100):(括号可选)并删除您的 break 语句,该语句仅强制进行一次迭代。

    【讨论】:

    • 感谢 Randy C。我试了一下,结果.. ValueError: 系列的真值不明确,使用 a.empty, a.bool(), a.item(), a .any() 或 a.all()。我添加了 [] 以避免这种情况。我也试过 ([i
    • i = RPdata.tail(1)['AGE'] 正在将 i 初始化为一个 pd.Series,其中包含一个值。您可以使用 i = RPdata['AGE'].iloc[-1] 来获取值 10。
    • 抱歉,我不知道如何正确格式化 cmets 部分的打印结果。年龄并不像应该的那样读为 11,但是 i = 到 10。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-29
    • 2021-10-15
    • 1970-01-01
    • 2017-09-15
    • 2019-07-13
    • 1970-01-01
    • 2021-06-06
    相关资源
    最近更新 更多