【问题标题】:Two different beaviour for .tolist() IndexError.tolist() IndexError 的两种不同行为
【发布时间】:2022-01-22 04:47:24
【问题描述】:

我在数据帧df1 上循环查找maximum order,然后我想将discount_first 分配给最大订单。

对于一个数据集,一切正常

new_rate_1 = []
for value in df1["maximum_order"]:
    new_val = df[df["New_Order_Lines"]==value]["discount_first"]
    new_val = new_val.tolist()[0]
    new_rate_1.append(new_val)
new_rate_1 

[-1.3,
 -1.3,
 0.35,
 0.8,
 0.75,
 0.55,
 0.8,
 0.85,
 0.4,
 0.75,
 0.85,
 0.85,
 0.55,
 0.45,
 0.8,
 0.65,
 0.55,
 0.85,
 0.35,
 0.85,
 0.9,
 0.5,
 0.55,
 -0.6,
 0.85,
 0.75,
 0.35,
 0.15,
 0.55,
 0.7,
 0.8,
 0.85,
 0.75,
 0.65,
 0.75,
 0.75,
 0.35,
 0.85,
 0.4,
 ...
 ....
]

对于其他数据集我开始出错?

IndexError: list index out of range

如果我不在外观中索引列表,我不会收到错误,输出看起来像这样

 [[0.8],
 [0.8],
 [0.55],
 [0.55],
 [0.55],
 [0.85],
 [0.55],
 [0.85],
 [0.85],
 [0.65],
 [0.65],
 [0.75],
 [0.7]
 .....
  • 有什么建议/建议如何摆脱行为?

提前致谢

【问题讨论】:

  • 导致错误的数据列表显然在某处包含一个空行。仔细检查您的数据。

标签: python pandas list


【解决方案1】:

用这个怎么样

# new_val = new_val.tolist()[0]
new_val = new_val.values.flatten()[0]

【讨论】:

    【解决方案2】:

    既然可以不用循环,为什么还要循环呢?

    你可以使用isin()+tolist()方法:

    new_rate_1 =df.loc[df["New_Order_Lines"].isin(df1["maximum_order"]),"discount_first"].tolist()
    

    【讨论】:

    • 我需要循环,因为我要将这些折扣分配给包含 77452 个条目的 df2。基本上寻找每个条目并分配速率。它们也是重复的
    • @user3459293 在两个 df 中你有任何共同的列吗(我的意思是你要在什么基础上分配这些值,因为你根本不需要循环)?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-26
    • 2014-08-22
    相关资源
    最近更新 更多