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是的,这是正确的,如果你想要一个不同的行为,那么你需要更清楚地定义你的问题。现在,我看到了我期望的行为。谢谢