我正在尝试使用来自两个不同数据帧的数据进行条件合并 我的原始数据帧。你知道吗
使用iloc选择用于条件查找的两个数据帧的数据。一个数据帧用于新建,一个用于扩展。你知道吗
n_push_count= push_count_mapping.iloc[:,0:4]
e_push_count = push_count_mapping.iloc[:,-4:9]
type_n aging_n mini_n percent_n
0 New 0 0 0.520833
1 New 1 1 0.318471
2 New 2 2 0.234848
3 New 3 3 0.156627
4 New 4 4 0.129032
5 New >5 5 0.129630
6 New 5 4 4.500000
7 New 6 5 4.500000
8 New 4 5 4.400000
type_e aging_e mini_e percent_e
0 Expansion 0 0 0.642722
1 Expansion 1 1 0.413793
2 Expansion 2 2 0.260204
3 Expansion 3 3 0.196721
4 Expansion 4 4 0.215385
5 Expansion >5 5 0.156627
6 Expansion 4 4 66.000000
7 Expansion >5 5 3.000000
8 Expansion >5 5 4.000000
我想合并百分比或百分比,这取决于交易类型是新的还是扩展到推送计数分数。这个数据帧的长度是40条记录。0-39 这是df2
deal_type push_count push_count_score
0 Expansion 0 NaN
1 Expansion 3 NaN
2 New 2 NaN
3 Expansion 0 NaN
我下面的函数适用于一组具有相同数据长度的类似列。这是完整的代码
from IPython.display import display, HTML
import pandas as pd
import csv
import json
import numpy as np
n_push_count= push_count_mapping.iloc[:,0:4]
e_push_count = push_count_mapping.iloc[:,-4:9]
def add_push_count(row):
if row['deal_type'] == 'New':
return n_push_count.loc[n_push_count['mini_n'] < row['push_count']].iloc[-1]['percent_n']
elif row['deal_type'] == 'Expansion':
return e_push_count.loc[e_push_count['mini_e'] < row['push_count']].iloc[-1]['percent_e']
df2['push_count_score'] = df2.apply(add_push_count, axis=1)
display(df)
我运行函数时收到一个错误
IndexError: ('single positional indexer is out-of-bounds', 'occurred at index 0')
有人能帮忙解释一下这个错误是什么吗?在我的代码中,这个函数适用于一个非常类似的应用程序,但它甚至不适用于我正在处理的一部分数据。df2是数据帧的一部分。你知道吗
发生此错误的原因是在某些情况下
n_push_count.loc[n_push_count['mini_n'] < row['push_count']]
(或另一个带有e_
)返回空数据帧。用.iloc[-1]
索引空数据帧会引发IndexError
。你知道吗例如,这是因为
df2
的第一行push_count
等于0
,并且e_push_count
数据帧中mini_n
列的值都是零或正整数。你知道吗在这种情况下,你需要选择做什么,这是一件只有你才能决定的事情。你知道吗
一种可能性是将条件从
lesser
更改为lesser or equal
:使用<=
而不是<
。你知道吗在本例中,使用您的数据示例,您将得到:
但是,如果您要求
n_push_count['mini_n']
应该严格小于row['push_count']
,那么您就没有该值的字段,必须修改代码以保持空值。为此,可以将函数的代码包装在try except
块中:您的
df2
将是:相关问题 更多 >
编程相关推荐