Python 熊猫使用loc和重复索引更新值

Python 熊猫使用loc和重复索引更新值,python,pandas,dataframe,Python,Pandas,Dataframe,全部, 我有一个重复索引的数据帧。我正在尝试使用该索引的所有行的索引来更新这些值。这是我的一个例子 name x t 0 A 5 0 B 2 1 A 7 2 A 5 2 B 9 2 C 3 每次都有“A”。我想用当前值“x”替换“x”,减去当时“A”的“x”值。棘手的部分是使用数组或数据帧,在本例中就是这样 array([5, 5, 7, 5, 5, 5]) 这是“A”的值,但对每个时间戳重复。然后我可以从df['x']中

全部,

我有一个重复索引的数据帧。我正在尝试使用该索引的所有行的索引来更新这些值。这是我的一个例子

  name  x
t        
0    A  5
0    B  2
1    A  7
2    A  5
2    B  9
2    C  3
每次都有“A”。我想用当前值“x”替换“x”,减去当时“A”的“x”值。棘手的部分是使用数组或数据帧,在本例中就是这样

array([5, 5, 7, 5, 5, 5])
这是“A”的值,但对每个时间戳重复。然后我可以从df['x']中减去这个。我的工作方案如下

temp = df[df['name'] == 'A']
d = dict(zip(temp.index, temp['x']))
df['x'] = df['x'] - df.index.to_frame()['t'].replace(d)


  name  x
t        
0    A  0
0    B -3
1    A  0
2    A  0
2    B  4
2    C -2

这是可行的,但感觉有点不对劲,我忍不住认为有更好(而且必须更快)的解决方案…

我会做
reindex

df.x-=df.loc[df.name=='A','x'].reindex(df.index).values
df
Out[362]: 
  name  x
t        
0    A  0
0    B -3
1    A  0
2    A  0
2    B  4
2    C -2

我将执行
reindex

df.x-=df.loc[df.name=='A','x'].reindex(df.index).values
df
Out[362]: 
  name  x
t        
0    A  0
0    B -3
1    A  0
2    A  0
2    B  4
2    C -2
groupby.cumsum()

 df['x']=df.groupby((df.name=='A').cumsum())['x'].apply(lambda s:s.sub(s.iloc[0]))


 name  x
t        
0    A  0
0    B -3
1    A  0
2    A  0
2    B  4
2    C -2
groupby.cumsum()

 df['x']=df.groupby((df.name=='A').cumsum())['x'].apply(lambda s:s.sub(s.iloc[0]))


 name  x
t        
0    A  0
0    B -3
1    A  0
2    A  0
2    B  4
2    C -2

这正是我需要的。非常感谢。我只使用reindex将索引重置为0..N,我从来不知道它可以用来复制行。这正是我所需要的。非常感谢。我只使用过reindex将索引重置为0..N,我从来不知道它可以用于基本上复制行