gpt4 book ai didi

python - 两行配对并从每行切片

转载 作者:行者123 更新时间:2023-11-28 22:18:14 25 4
gpt4 key购买 nike

我有一个像这样的数据框:

    x1    y1    x2    y2
0 149 2653 2152 2656
1 149 2465 2152 2468
2 149 1403 2152 1406
3 149 1215 2152 1218
4 170 2692 2170 2695
5 170 2475 2170 2478
6 170 1413 2170 1416
7 170 1285 2170 1288

我需要将数据帧索引中的每两行进行配对。即 [0,1]、[2,3]、[4,5]、[6,7] 等,

从该对的第一行中提取x1,y1,从该对的第二行中提取x2,y2,对于每对行类似。

示例输出:

[[149,2653,2152,2468],[149,1403,2152,1218],[170,2692,2170,2478],[170,1413,2170,1288]]

如有不清楚的地方,请随时询问。

到目前为止,我尝试了按对分组,并尝试了移位操作。但我没能做出配对记录。

最佳答案

Python 解决方案:

按要列表的位置选择列值:

a = df[['x2', 'y2']].iloc[1::2].values.tolist()
b = df[['x1', 'y1']].iloc[0::2].values.tolist()

然后 zip 并在列表理解中连接在一起:

L = [y + x for x, y in zip(a, b)]
print (L)
[[149, 2653, 2152, 2468], [149, 1403, 2152, 1218],
[170, 2692, 2170, 2478], [170, 1413, 2170, 1288]]

谢谢@user2285236提供的另一个解决方案:

L = np.concatenate([df.loc[::2, ['x1', 'y1']], df.loc[1::2, ['x2', 'y2']]], axis=1).tolist()

纯 Pandas 解决方案:

第一DataFrameGroupBy.shift每 2 行:

df[['x2', 'y2']] = df.groupby(np.arange(len(df)) // 2)[['x2', 'y2']].shift(-1)
print (df)
x1 y1 x2 y2
0 149 2653 2152.0 2468.0
1 149 2465 NaN NaN
2 149 1403 2152.0 1218.0
3 149 1215 NaN NaN
4 170 2692 2170.0 2478.0
5 170 2475 NaN NaN
6 170 1413 2170.0 1288.0
7 170 1285 NaN NaN

然后删除 NaN 行,转换为 int,然后转换为 list:

print (df.dropna().astype(int).values.tolist())
[[149, 2653, 2152, 2468], [149, 1403, 2152, 1218],
[170, 2692, 2170, 2478], [170, 1413, 2170, 1288]]

关于python - 两行配对并从每行切片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50676064/

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