python - 当我执行循环时,如何在数据框中添加额外的行

标签 python pandas dataframe

每当函数的 bid_t 增加时,我想向数据框添加因子。 我现在创建的函数与我想要的不同,因为它只返回一次数据帧。如果确定等级是一个函数,并且假设它运行良好,那么应该如何纠正这个函数? 我已经改变了很多东西,但我不知道要改变或添加什么。 请给我一些想法...

def determinehamsu(t,n,bid_t,w,h,k):

    encode = LabelEncoder()
    rank = determineRank(t,n,bid_t,w,h,k)
    df = pd.DataFrame(data={'Time': [t], 'Now_Rank': [n], 'Amount': [bid_t], 'Weekday': [w], 'Holiday': [h], 'Keyword': [k], 'Target': [rank]},
                      columns=['Time', 'Now_Rank', 'Amount', 'Weekday', 'Holiday', 'Keyword', 'Target'])

    if bid_t <= 6010:
        for bid_t in range(bid_t, 6010,10):
            rank = determineRank(t,n,bid_t,w,h,k)
            df.append([t, n, bid_t, w, h, k])
            print(rank)
            print(bid_t)

    elif bid_t > 6010:
        for bid_t in range(bid_t,0,-10):
            rank = determineRank(t,n,bid_t,w,h,k)
            df.append([t, n, bid_t, w, h, k])
            print(rank)
            print(bid_t)
    return df

最佳答案

DataFrame.append 采用“DataFrame 或 Series/dict 类对象,或这些对象的列表” 这段话来自https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.append.html

我认为对你来说更简单的方法是传递一个字典而不是一个列表。您追加的内容看起来像

df = df.append({'Time': t,
                'Now_Rank': n,
                'Amount': bid_t,
                'Weekday': w,
                'Holiday': h,
                'Keyword': k,
                'Target': rank}, ignore_index=True)

编辑: Append 返回一个新的 DataFrame,因此您需要设置 df = 来使用新的 DataFrame。

但是,如果我编写了这个方法,我可能只会创建一个 dic 列表并在最后将它们转换为 DataFrame。但也许这只是个人选择。

关于python - 当我执行循环时,如何在数据框中添加额外的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59138058/

相关文章:

python - 确定列表是否是周期性的python

python Pandas : replace values multiple columns matching multiple columns from another dataframe

c++ - 使用带有 python 的 DLL(使用 ctypes),不工作

python - AutoMl Edge 模型仅显示图像

python - 描述当前范围的对象

python - Pandas 的ValueError : DataFrame constructor not properly called!

python - 如何在 Python 中将表示为字符的数字简称为数字

python - 使用列表内的列表时如何处理 KeyError

python - 将整个数据集转换为百分比

r - 在连续组上多次使用 setdiff() 而不使用 for 循环