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

Python 根据另一个熊猫系列的索引从熊猫系列中提取数据,python,pandas,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 =

有三个熊猫系列

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
以下是我的看法:

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()
输出:

以下是我的看法:

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()
输出:


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

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

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

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

Groupby的索引重复:

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()

Groupby的索引重复:

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()