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

pyl*_*ang 5 python dataframe python-3.x pandas

原始数据集

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
Run Code Online (Sandbox Code Playgroud)

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

条件:

  • 在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
Run Code Online (Sandbox Code Playgroud)

我了解到我可以使用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
Run Code Online (Sandbox Code Playgroud)

但我需要多次这样做,而且我理解iterrows()很慢.是否有更好的大熊猫,类似广播的方式可以更有效地获得理想的结果?

max*_*moo 5

This should do what you want:

df.C[df.B == 'x'] = df.C.shift(-1)
Run Code Online (Sandbox Code Playgroud)