Pandas 根据a列中的值,在数据帧中将C列和D列中的值向右移动

Pandas 根据a列中的值,在数据帧中将C列和D列中的值向右移动,pandas,dataframe,Pandas,Dataframe,如何基于以下数据集实现所需的结果 A B C D E 1 apple 5 2 20 NaN 2 orange 2 6 30 NaN 3 apple 6 1 40 NaN 4 apple 10 3 50 NaN 5 banana 8 9 60 NaN 预期结

如何基于以下数据集实现所需的结果

        A     B      C      D      E       
1    apple    5      2     20    NaN
2    orange   2      6     30    NaN
3    apple    6      1     40    NaN
4    apple    10     3     50    NaN
5    banana   8      9     60    NaN
预期结果:

        A     B      C      D      E       
1    apple    5    NaN      2     20
2    orange   2      6     30    NaN
3    apple    6    NaN      1     40    
4    apple    10   NaN      3     50    
5    banana   8      9     60    NaN
IIUC您可以在感兴趣的行上使用,这里我们只需要选择“A”为“apple”的行,然后
按单列逐行滚动
这些行并分配回:

In [14]:    
df.loc[df['A']=='apple', 'C':] = np.roll(df.loc[df['A']=='apple', 'C':], 1,axis=1)
df

Out[14]:
        A   B    C   D     E
1   apple   5  NaN   2  20.0
2  orange   2  6.0  30   NaN
3   apple   6  NaN   1  40.0
4   apple  10  NaN   3  50.0
5  banana   8  9.0  60   NaN
请注意,由于您引入了
NaN
值,因此
dtype
更改为
float
,以允许您在感兴趣的行上使用此IIUC,这里我们只需选择'A'为'apple'的行,然后
按单列逐行滚动这些行并分配:

In [14]:    
df.loc[df['A']=='apple', 'C':] = np.roll(df.loc[df['A']=='apple', 'C':], 1,axis=1)
df

Out[14]:
        A   B    C   D     E
1   apple   5  NaN   2  20.0
2  orange   2  6.0  30   NaN
3   apple   6  NaN   1  40.0
4   apple  10  NaN   3  50.0
5  banana   8  9.0  60   NaN

请注意,由于您引入了
NaN
值,因此
dtype
更改为
float
以允许此操作

我不理解您的问题。我想在列A中搜索带有apple的行,然后将在列C和D中找到的特定行的值向右移动-如所需结果所示。顺便说一下,您可以立即投票;)我不明白你的问题。我想在A列中搜索apple所在的行,然后将在C列和D列中找到的特定行的值向右移动,如所需结果所示。顺便说一句,你现在可以向上投票;)我想从问题的描述来看,OP想在这里执行移位而不是滚动操作。在您的例子中,如果E具有有限的值,列E下的值将被交换到列C。我测试了它。滚动后,C列中的值变为NaN。可能是因为E有NaN?@Sun是的,这是正确的,如果你想要一个不同的行为,那么你需要更清楚地定义你的问题。现在,我看到了我期望的行为。谢谢。我想从问题的描述来看,OP想在这里执行移位而不是滚动操作。在您的例子中,如果E具有有限的值,列E下的值将被交换到列C。我测试了它。滚动后,C列中的值变为NaN。可能是因为E有NaN?@Sun是的,这是正确的,如果你想要一个不同的行为,那么你需要更清楚地定义你的问题。现在,我看到了我期望的行为。谢谢