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