Python 3.x 将数据帧列转换为对列表

Python 3.x 将数据帧列转换为对列表,python-3.x,pandas,Python 3.x,Pandas,我想将其转换为如下内容: col_1 A 2 B 8 C 4 D 3 E 1 我试过一个for循环 [[1,2],[3,4],...] 在熊猫中有没有一种有效的方法可以做到这一点?您可以使用列表理解来做到这一点: def get_pair(col): lst = sorted(list(col)) pairs = [] for i in range(len(col)): for j in range(i+1

我想将其转换为如下内容:

  col_1
A   2   
B   8    
C   4    
D   3
E   1
我试过一个for循环

[[1,2],[3,4],...]

在熊猫中有没有一种有效的方法可以做到这一点?

您可以使用
列表理解来做到这一点:

def get_pair(col):
    lst = sorted(list(col))
    pairs = []
    for i in range(len(col)):
        for j in range(i+1, len(lst)):
            pair = [lst[i], lst[j]]
            pairs.append(pair)
    return pairs


您可以使用
列表理解

def get_pair(col):
    lst = sorted(list(col))
    pairs = []
    for i in range(len(col)):
        for j in range(i+1, len(lst)):
            pair = [lst[i], lst[j]]
            pairs.append(pair)
    return pairs

项目偶数或奇数的解决方案;使用numpy 扩展@sammywemmy提供的奇妙想法,我正在使用numpy。以下解决方案将处理偶数或奇数:

In [644]: df
Out[644]: 
   col_1
A      1
B      2
C      3
D      4

In [656]: l = df.T.values.tolist()[0]

In [672]: pairs = [l[:c][-2:] for c, i in enumerate(l, 1) if c % 2 == 0]

In [673]: pairs
Out[673]: [[1, 2], [3, 4]]
输出将是:

import pandas as pd
import numpy as np

df = pd.DataFrame({'col_1':[1,2,3,4,5,6,7,8,9]})

#check length of df. If len is odd, get items upto n-1
x = len(df)
y = x if x%2 == 0 else x-1

#reshape only n-1 items if n is odd
z = np.reshape(df.col_1.to_numpy()[:y], (-1, 2)).tolist()

#if n is odd, then append nth item with None.
if x != y: z.append([df.values.tolist()[-1][0],None])

#print result
print (z)
如果希望结果集如下所示:

[[1, 2], [3, 4], [5, 6], [7, 8], [9, None]]
然后将
z.append
行更改为

[[1, 2], [3, 4], [5, 6], [7, 8], [9]]
如果列表中的项目数为偶数,则解决方案 假设您的数据框是一个项目的偶数列表,您可以使用
iterrows()
list-comprehension
来获得所需的内容

if x != y: z.append(df.values.tolist()[-1])
这将为您提供:

import pandas as pd
df = pd.DataFrame({'col_1':[1,2,3,4,5,6,7,8]})
print (df)

a = [[v['col_1'],df.iloc[i+1]['col_1']] for i,v in df.iloc[::2].iterrows()]
print (a)
项目偶数或奇数的解决方案;使用numpy 扩展@sammywemmy提供的奇妙想法,我正在使用numpy。以下解决方案将处理偶数或奇数:

In [644]: df
Out[644]: 
   col_1
A      1
B      2
C      3
D      4

In [656]: l = df.T.values.tolist()[0]

In [672]: pairs = [l[:c][-2:] for c, i in enumerate(l, 1) if c % 2 == 0]

In [673]: pairs
Out[673]: [[1, 2], [3, 4]]
输出将是:

import pandas as pd
import numpy as np

df = pd.DataFrame({'col_1':[1,2,3,4,5,6,7,8,9]})

#check length of df. If len is odd, get items upto n-1
x = len(df)
y = x if x%2 == 0 else x-1

#reshape only n-1 items if n is odd
z = np.reshape(df.col_1.to_numpy()[:y], (-1, 2)).tolist()

#if n is odd, then append nth item with None.
if x != y: z.append([df.values.tolist()[-1][0],None])

#print result
print (z)
如果希望结果集如下所示:

[[1, 2], [3, 4], [5, 6], [7, 8], [9, None]]
然后将
z.append
行更改为

[[1, 2], [3, 4], [5, 6], [7, 8], [9]]
如果列表中的项目数为偶数,则解决方案 假设您的数据框是一个项目的偶数列表,您可以使用
iterrows()
list-comprehension
来获得所需的内容

if x != y: z.append(df.values.tolist()[-1])
这将为您提供:

import pandas as pd
df = pd.DataFrame({'col_1':[1,2,3,4,5,6,7,8]})
print (df)

a = [[v['col_1'],df.iloc[i+1]['col_1']] for i,v in df.iloc[::2].iterrows()]
print (a)

其他答案应该很好;这是一种替代方案,使用:


其他答案应该很好;这是一种替代方案,使用:



配对的逻辑是什么。第一个和第二个是一对,第三个和第四个是一对,依此类推。[1,2],[3,4]等等on@sammywemmy,反应很好。我只想添加.tolist()
np.reforme(df.col_1.to_numpy(),(-1,2)).tolist()
hey@prb,希望下面的答案足够匹配逻辑。第一个和第二个是一对,第三个和第四个是一对,依此类推。[1,2],[3,4]等等on@sammywemmy,反应很好。我只想添加.tolist()<代码>np.重塑(df.col_1.to_numpy(),(-1,2)).tolist()
嘿@prb,希望下面的答案足够我想我需要编辑我的问题。如果列表不均匀,情况会怎样<代码>{'colu_1':[1,2,3,4,5,6,7,8,9]}@prb,我扩展了sammywemmy的想法,并发布了一个回复,应该可以解决您列表中的奇数。我想我需要编辑我的问题。如果列表不均匀,情况会怎样<代码>{'colu_1':[1,2,3,4,5,6,7,8,9]}@prb,我扩展了sammywemmy的想法,并发布了一个回复,该回复应该可以解决您列表中的奇数。@prb:试试我的解决方案。我试过了。它不会打印最后一项。它为值1到值1打印
[[1,2],[3,4],[5,6],[7,8]
9@prb我试过了。它不会打印最后一项。它为值1到9打印
[[1,2],[3,4],[5,6],[7,8]
,如果OP在列表中查找嵌套列表而不是元组,那么我们需要使用
列表
再使用
映射
再使用
zip
进行额外的循环<代码>列表(map(list,zip_longest(box[::2],box[1::2]))如果OP在列表中查找嵌套列表而不是元组,那么我们需要使用
list
然后
map
然后
list
zip
进行额外的循环<代码>列表(地图(列表,邮政编码最长(方框[::2],方框[1::2]))