In [2]: import pandas as pd
...:
...: # Original DataSet
...: d = {'A': [1,1,1,1,2,2,2,2,3],
...: 'B': ['a','a','a','x','b','b','b','x','c'],
...: 'C': [11,22,33,44,55,66,77,88,99],}
...:
...: df = pd.DataFrame(d)
...: df
Out[2]:
A B C
0 1 a 11
1 1 a 22
2 1 a 33
3 1 x 44
4 2 b 55
5 2 b 66
6 2 b 77
7 2 x 88
8 3 c 99
给定一个数据帧,我想要一种灵活,有效的方法来根据两列中的某些条件重置特定值。
条件:
Out[3]:
A B C
0 1 a 11
1 1 a 22
2 1 a 33
3 1 x 55
4 2 b 55
5 2 b 66
6 2 b 77
7 2 x 99
8 3 c 99
我了解到我可以使用iterrows()
(见下文),
# Code that produces the above outcome
for idx, x_row in df[df['B'] == 'x'].iterrows():
df.loc[idx, 'C'] = df.loc[idx+1, 'C']
df
但我需要多次这样做,我理解iterrows()
is slow。是否有更好的大熊猫,类似广播的方式可以更有效地获得理想的结果?
答案 0 :(得分:4)
这应该做你想要的:
df.C[df.B == 'x'] = df.C.shift(-1)