Python 如何更快地迭代数据帧中的行?

Python 如何更快地迭代数据帧中的行?,python,pandas,dataframe,loops,vectorization,Python,Pandas,Dataframe,Loops,Vectorization,我有一个来自熊猫的数据帧: import pandas as pd data = [{'c1':'aaa', 'c2':100, 'c3': 99, 'c4': 0}, {'c1':'bbb','c2':110, 'c3': 89, 'c4': 0}, {'c1':'aaa','c2':NaN,'c3': 93, 'c4': 0},{'c1':'ccc', 'c2':130,'c3': 77, 'c4': 0}, {'c1':'ddd','c2':140,'c3': 54, 'c4': 0}

我有一个来自熊猫的数据帧:

import pandas as pd
data = [{'c1':'aaa', 'c2':100, 'c3': 99, 'c4': 0}, {'c1':'bbb','c2':110, 'c3': 89, 'c4': 0}, 
{'c1':'aaa','c2':NaN,'c3': 93, 'c4': 0},{'c1':'ccc', 'c2':130,'c3': 77, 'c4': 0}, 
{'c1':'ddd','c2':140,'c3': 54, 'c4': 0}, {'c1':'bbb','c2':NaN,'c3': 76, 'c4': 0},
{'c1':'ddd', 'c2':NaN,'c3': 75, 'c4': 0}]
df = pd.DataFrame(data)
print df
输出:

   c1    c2   c3  c4
0 'aaa'  100  99  0
1 'bbb'  110  89  0
2 'aaa'  100  93  0
3 'ccc'  130  77  0
4 'ddd'  140  54  0
5 'bbb'  110  76  0
6 'ddd'  140  75  0
现在,我想为每一行匹配列c1,设置列c4等于另一行匹配第一个字段的列c2。结果是:

   c1    c2   c3  c4
0 'aaa'  100  99  0
1 'bbb'  110  89  0
2 'aaa'  100  93  100
3 'ccc'  130  77  0
4 'ddd'  140  54  0
5 'bbb'  110  76  110
6 'ddd'  140  75  140
这个数据帧就是一个例子,真正的数据帧有更多的列和更多的行(大约400万)。我最初的想法是:

for index, row in df.iterrows(): 
    df[df.c1==row.c1].iloc[1].c4= row.c2


只能有另一个匹配行。显然,使用iterrows的过程非常慢。

根据您最近的编辑,您可以使用
df.groupby
填充NA,然后使用shift键,这会将值向下移动一行到组后面:

df['c4'] = df.groupby("c1")['c2'].shift().fillna(df['c4'])


不要迭代,
df.groupby(“c1”)['c2'].ffill()
可以吗我想我已经更新了问题。。。
      c1   c2  c3     c4
0  'aaa'  100  99    0.0
1  'bbb'  110  89    0.0
2  'aaa'  100  93  100.0
3  'ccc'  130  77    0.0
4  'ddd'  140  54    0.0
5  'bbb'  110  76  110.0
6  'ddd'  140  75  140.0