gpt4 book ai didi

python - Pandas 将 3 列的值与下一行交换

转载 作者:行者123 更新时间:2023-11-30 21:50:59 27 4
gpt4 key购买 nike

我正在使用 pandas 数据框,想要将一行中 3 列 [EndLocation、EndDevice、EndPort] 的值与下一行交换,然后下一行成为第一行。

  StartLocation StartDevice StartPort EndLocation EndDevice EndPort LinkType  \
0 DD1 Switch1 P1 AD1 Switch2 P2 MTP
1 AB11 RU15 P1 AJ11 RU25 P1 NaN
2 DD2 Switch2 P3 AD2 Switch3 P2 MTP
3 AB12 RU18 P2 AB11 RU35 P3 NaN
4 DD3 Switch3 P5 AD3 Switch4 P6 MTP
5 AB13 RU19 P3 AB11 RU40 P4 NaN

预期输出:

    StartLocation StartDevice StartPort EndLocation EndDevice EndPort LinkType  \
0 DD1 Switch1 P1 AJ11 RU25 P1 MTP
1 AB11 RU15 P1 AD1 Switch2 P2 NaN
2 DD2 Switch2 P3 AB11 RU35 P3 MTP
3 AB12 RU18 P2 AD2 Switch3 P2 NaN
4 DD3 Switch3 P5 AB11 RU40 P4 MTP
5 AB13 RU19 P3 AD3 Switch4 P6 NaN

shift()np.roll() 不适合我的用例,因为这是端口映射,需要保留起点。循环遍历数据框是一个坏主意吗?

为了更加清晰而进行了编辑

最佳答案

这有效:

(
df.iloc[0::2, 3:6],
df.iloc[1::2, 3:6],
) = (
df.shift(-1).iloc[:, 3:6],
df.shift(1).iloc[:, 3:6],
)

它使用Python的元组分配来同时分配偶数行和奇数行。

df.iloc[0::2, 3:6] 将分配给第 3、4 和 5 列(EndLocationEndDeviceEndPort)的偶数行(0、2 和 4),而 df.iloc[1::2, 3:6] 将分配给偶数行(0、2 和 4)的相同列奇数行(1、3 和 5)。如果行数超过 6,这些表达式将继续工作。

对于要分配的值,我们使用两个移位表达式,一个向上移位用于偶数行 (1 -> 0, 3 -> 2, 5 -> 4),另一个向下移位用于奇数行 (0 -> 1、2 -> 3 和 4 -> 5),再次仅选择第 3、4 和 5 列。

由于 Pandas 将在赋值中对齐索引,因此它只会根据它正在查看的表达式来考虑偶数行或奇数行。

关于python - Pandas 将 3 列的值与下一行交换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60235662/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com