基于列值,将特定行的特定列进行移动 - Pandas

5
所以,我有一个2005年至2016年的NFL统计数据集。问题是,2009年增加了一个新类别,所以在2009年之前我的列偏移了。我希望所有'NFL Season'列小于2009赛季的行都向右移动,但只移动第11列到倒数第二列(即[11:-1])。
我设法以这种方式做到这一点,但遍历所有这些行需要很长时间(约10,000)。有没有更快的方法?我尝试看是否有使用isin的方式,我可以说如果行在我的'rows_to_shift'中,则无法弄清楚它如何工作。
就像我说的那样,在我还在学习pandas时,肯定有更好或更有效的方式。
这是我一直在使用的代码:
rows_to_shift = rb_df[rb_df['NFL Season'] < 2009].index.tolist()

for i in rows_to_shift:
    rb_df.iloc[[i],11:-1] = rb_df.iloc[[i],11:-1].shift(1,axis=1)
2个回答

8

看起来你需要:

rows_to_shift = rb_df[rb_df['NFL Season'] < 2009].index

rb_df.iloc[rows_to_shift,11:-1] = rb_df.iloc[rows_to_shift,11:-1].shift(1,axis=1)

是的,没错!我完全过度思考了这个问题/解决方案。 - chitown88

1

很抱歉,我一开始没有想到这个简单的解决方案,浪费了你的时间。问题并不复杂,只需要调用那些行即可,不需要迭代:

rb_df.iloc[rb_df[rb_df['NFL Season'] < 2009].index,11:-1] = rb_df.iloc[rb_df[rb_df['NFL Season'] < 2009].index,11:-1].shift(1,axis=1)

这不是一个愚蠢的问题。对于学习“pandas”的人来说,这是一个常见的问题,因此在Stack Overflow上有一个答案是很好的。基本上,在“pandas”中几乎永远不应该迭代行。 - wisbucky

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接