每次我尝试使用列表理解创建嵌套列表时,结果都会让人头疼,或者说结果不正确。我有一个由四个变量组成的转置数据框架,每个变量有9列。例如:
Date0, Date1, Date2, Date3 ... Date 9
GMV0, GMV1, GMV2, GMV3 .... GMV9
Revenue0, Revenue1, Revenue2, Revenue3 .... Revenue9我试图为这些列中的每一列创建一个嵌套列表。所需的清单如下:
[[Date0, GMV0, Revenue0], [Date1, GMV1, Revenue1], [Date2, GMV2, Revenue2] ... [Date9, GMV9, Revenue9]]当前,我可以使用
date=[col for col in test.columns if 'Date' in col]
gmv=[col for col in test.columns if 'GMV' in col]
rev=[col for col in test.columns if 'Gross Revenue' in col]
vars=[[Date[i], gmv[i], rev[i]] for i in range(len(Date))]但这是非常低效率的,我很肯定,这是一个一行行代码。
有人能帮我理解正确的列表(或者其他一些特定于数据转换的方法)并帮助我理解它吗?
发布于 2021-09-17 13:51:47
您可以使用to_dict
>>> df
0 1 2 3 4
0 Date0 Date1 Date2 Date3 Date9
1 GMV0 GMV1 GMV2 GMV3 GMV9
2 Revenue0 Revenue1 Revenue2 Revenue3 Revenue9
>>> list(df.to_dict(orient='list').values())
[['Date0', 'GMV0', 'Revenue0'],
['Date1', 'GMV1', 'Revenue1'],
['Date2', 'GMV2', 'Revenue2'],
['Date3', 'GMV3', 'Revenue3'],
['Date9', 'GMV9', 'Revenue9']]更新
>>> df
Date0 Date1 Date2 Date3 GMV0 GMV1 GMV2 GMV3 Revenue0 Revenue1 Revenue2 Revenue3
0 A B C D E F G H I J K L
>>> [list(t.columns) for _, t in df.groupby(df.columns.str.extract(r'(\d+)', expand=False), axis=1)]
[['Date0', 'GMV0', 'Revenue0'],
['Date1', 'GMV1', 'Revenue1'],
['Date2', 'GMV2', 'Revenue2'],
['Date3', 'GMV3', 'Revenue3']]发布于 2021-09-17 13:51:35
您可以在嵌套的for子句中使用列表理解。
vars = [
col
for key in ['Date', 'GMV', 'Gross Revenue']
for col in test.columns if key in col
]参考资料:https://docs.python.org/3/reference/expressions.html#displays-for-lists-sets-and-dictionaries
或者,如果您已经有三个列表,则可以使用内置函数zip。就像一个转座子。
vars = list(zip(date, gmv, rev))最新情况:
很抱歉误解了这个问题。如果需要嵌套列表,下面的代码将有效。
vars = list(zip(*(
[col for col in test if key in col]
for key in ['Date', 'GMV', 'Gross Revenue']
)))如果你已经在使用DataFrame,@Corr外星人的答案会更好。当你想用普通的Python来做时,这个答案是有用的。
发布于 2021-09-17 15:09:19
如果输入列表是:
>>> test = [['a1','a2','a3'],['b1', 'b2','b3'],['c1','c2','c3']]然后
>>> b = [[test[x][i] for x in range(len(test))] for i in range(len(test[0]))]
>>> b
[['a1', 'b1', 'c1'], ['a2', 'b2', 'c2'], ['a3', 'b3', 'c3']]为了理解:尝试i=0的内部循环结果,然后i=1 .
>>> i = 0
>>> [test[x][i] for x in range(len(test))]https://stackoverflow.com/questions/69224489
复制相似问题