我可以在不使用iterrows()的情况下设置数据帧值吗?

时间:2015-07-06 06:06:57

标签: python python-3.x pandas dataframe

原始数据集

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

给定一个数据帧,我想要一种灵活,有效的方法来根据两列中的某些条件重置特定值。

条件:

    B列中的
  • :对于任何具有值' x',
  • 的行 C列中的
  • :将这些row-elements的值设置为下一行的值。

期望的结果

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。是否有更好的大熊猫,类似广播的方式可以更有效地获得理想的结果?

1 个答案:

答案 0 :(得分:4)

这应该做你想要的:

df.C[df.B == 'x'] = df.C.shift(-1)