根据另一个熊猫系列的索引从熊猫系列中提取数据

时间:2019-05-24 00:28:57

标签: python pandas

有三个熊猫系列

x = pd.Series([220,340,500,600,700,900,540,60])
y = pd.Series([2,1,2,2,1])
z = pd.Series([])

y的每个元素将表示要添加和放入z的元素个数 例如:如果系列的开头有2,则我将在开头220和340处添加前两个元素,以得到560,然后将其放在z中作为第一个元素。接下来,我在y中有1,这意味着我将从x(第三个元素)中提取500,并将其作为第二个元素放在z中,依此类推

这是我尝试过的

j = 0
for i in y:
    par = y[i]
    z[i] = x[j:par + j].sum()
    j = j+par

3 个答案:

答案 0 :(得分:3)

Groupby y的索引重复:

x.groupby(y.index.repeat(y)).sum()

0     560
1     500
2    1300
3    1440
4      60
dtype: int64

如果长度不匹配,将导致ValueError。在这种情况下,一种更安全的选择是对累计进行分组,重复并重置索引:

x.groupby(y.cumsum().repeat(y).reset_index(drop=True)).sum()

答案 1 :(得分:1)

这是我的看法:

df = x.to_frame(name='x').reset_index(drop=True)
df['cat'] = pd.cut(df.index+1, y.cumsum(), labels=False)
df['cat'] = df['cat'].fillna(-1).add(1)

z = df.groupby('cat').x.sum()

出局:

cat
0.0     560
1.0     500
2.0    1300
3.0    1440
4.0      60
Name: x, dtype: int64

答案 2 :(得分:0)

这是索引冲突问题,只需更新循环以使用范围即可

j = 0
for i in range(len(y)):
    par = y[i]
    print('first',i)
    z[i] = x[j:par + j].sum()
    print('second',j,'par',par)
    j = j+par

>> z

0     560
1     500
2    1300
3    1440
4      60