嵌套用于循环和条件熊猫替换

我有两个不同的熊猫数据框,其中第一个数据框(价格)中有两列。第一列名为value的值中包含一些值,第二列金额具有每个价格的可用金额。第二数据帧(仓)具有从价格数据帧产生的一些价格区间作为索引。对于价格数据框的每一行,我检查值列的每一行,以查找其与仓位数据框所属的间隔,如果该值在一个间隔中,则在仓位数据框中分配可用量。如果在相同的时间间隔内又有另一个值,我将在group_bins数据帧中将这些量求和。

import pandas as pd

bins = pd.DataFrame({
    'value': [1,2,5,7,8,16,20,3,9,11,35,12,54,33,22,23]
})

price = pd.DataFrame({
    'value': [2,2.5,3.4],'amount': [50,112,130,157,146,148,300,124,151,100,32]
})

bins['bins'] = pd.qcut(bins['value'],12)
group_bins = bins.groupby(['bins']).sum()
group_bins['amount'] = 0
del group_bins['value']

for j in range(price.shape[0]):
    for i in range(group_bins.shape[0]):
        if price.loc[j,'value'] in group_bins.index[i]:
            group_bins.loc[group_bins.index[i],'amount'] += price.loc[j,'amount']

            break

预期结果:

                 amount
bins                    
(0.999,2.333]        50
(2.333,3.0]         400
(3.0,5.0]           144
(5.0,7.333]         130
(7.333,8.667]       157
(8.667,11.0]        275
(11.0,13.333]         0
(13.333,18.667]     146
(18.667,22.0]       148
(22.0,26.333]         0
(26.333,34.333]       0
(34.333,54.0]         0

我的问题是我有10万个数据,所有这些过程花费的时间太长。 是否有任何优雅且快捷的方法来替换这些嵌套的for循环和if条件?

预期结果是group_bins数量列中的最后一列。任何帮助将非常感激!谢谢。

zhang20045237 回答:嵌套用于循环和条件熊猫替换

如果在数据帧上使用for循环,则您有99%的时间做错了。尝试以下方法:

bins = pd.DataFrame({
    'value': [1,2,5,7,8,16,20,3,9,11,35,12,54,33,22,23]
})
bins['bins'] = pd.qcut(bins['value'],12)

price = pd.DataFrame({
    'value': [2,11],'amount': [50,112,130,157,146,148,300,124,151]
})

price.merge(bins,how='left',on='value') \
    .groupby('bins') \
    .agg({'amount': 'sum'})

结果:

                  amount
bins                    
(0.999,2.333]        50
(2.333,3.0]         600
(3.0,5.0]           112
(5.0,7.333]         130
(7.333,8.667]       157
(8.667,11.0]        275
(11.0,13.333]         0
(13.333,18.667]     146
(18.667,22.0]       148
(22.0,26.333]         0
(26.333,34.333]       0
(34.333,54.0]         0
本文链接:https://www.f2er.com/3127420.html

大家都在问