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]))