如何跨30个数据框重复相同的任务-Python Pandas

时间:2018-07-03 20:30:30

标签: python pandas quantile

我有以下数据框(称为 aa1 ):

d = {'Index' : pd.Series([25, 7, 7, 5, 5, 8])}
aa1 = pd.DataFrame(d)

我创建了一个名为 Quartile_Index 的新列,该列对 Index 列值的四分位数进行了评分 (注意:这是我能找到的最佳解决方案,因为pd.qcut库不允许您有重复的bin边缘):

quantile_frame = aa1.quantile(q=[0.25, 0.5, 0.75])
quantile_ranks = []
for index, row in aa1.iterrows():
    if (row['Index'] <= quantile_frame.ix[0.25]['Index']):
        quantile_ranks.append('q1')
    elif (row['Index'] >= quantile_frame.ix[0.25]['Index'] and row['Index'] <= quantile_frame.ix[0.5]['Index']):
        quantile_ranks.append('q2')
    elif (row['Index'] >= quantile_frame.ix[0.5]['Index'] and row['Index'] <= quantile_frame.ix[0.75]['Index']):
        quantile_ranks.append('q3')
    else:
        quantile_ranks.append('q4')

aa1['Quartile_Index'] = quantile_ranks

这是我能想到的最好的解决方案,但是我需要两个问题的帮助来进一步优化我的代码/逻辑:

  1. 是否有更简单的方法用更简单的代码触发四分位数列? pd.qcut不允许您具有重复的纸槽边缘,因此这不是解决方案。

  2. 我需要在其他30个熊猫数据帧( aa1 ,aa2,aa3等)上产生分位数列执行。我不想重复30次,所以那里有解决方案吗?我还没有循环那么先进。

1 个答案:

答案 0 :(得分:0)

遍历数据帧的解决方案(使用iloc代替.ix []):

data = [aa1,aa2]
for i in data:
    quantile_frame = i.quantile(q=[0.25, 0.5, 0.75])
    quantile_ranks = []
    for index, row in i.iterrows():
        if (row['Index'] <= quantile_frame.iloc[0]['Index']):
            quantile_ranks.append('q1')
        elif (row['Index'] >= quantile_frame.iloc[0]['Index'] and row['Index'] <= quantile_frame.iloc[1]['Index']):
            quantile_ranks.append('q2')
        elif (row['Index'] >= quantile_frame.iloc[1]['Index'] and row['Index'] <= quantile_frame.iloc[2]['Index']):
            quantile_ranks.append('q3')
        else:
            quantile_ranks.append('q4')
    i['Quartile_Index'] = quantile_ranks