每次我試圖用串列理解法創建一個嵌套串列時,結果都是非常令人頭疼的,或者是不正確的。我有一個由四個變陣列成的轉置資料框,我正在處理這個資料框,每個變數都有9列。例如:
Date0, Date1, Date2, Date3 ... 日期 9
gmv0, gmv1, gmv2, gmv3 .... GMV9
Revenue0, Revenue1, Revenue2, Revenue3 .... 收入9
我試圖為這些列中的每一個創建一個嵌套串列。需要的串列如下:
[[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))]
但這是相當低效的,我很肯定這是一個單行代碼。
誰能幫助我找到正確的串列理解方法(或者可能是其他一些專門針對轉置資料的方法),并幫助我解決這個問題?
uj5u.com熱心網友回復:
你可以使用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'/span>).values()
[['Date0'/span>, 'GMV0'/span>, 'Revenue0']。
['Date1'/span>, 'GMV1'/span>, 'Revenue1'/span>]。
['Date2'/span>, 'GMV2'/span>, 'Revenue2']。
['Date3'/span>, 'GMV3'/span>, 'Revenue3']。
['Date9'/span>, 'GMV9'/span>, 'Revenue9'/span>]]
Update
>>> 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'/span>, 'GMV0'/span>, 'Revenue0'/span>]。
['Date1'/span>, 'GMV1'/span>, 'Revenue1'/span>]。
['Date2'/span>, 'GMV2'/span>, 'Revenue2']。
['Date3', 'GMV3', 'Revenue3'] ]
uj5u.com熱心網友回復:
你可以用嵌套的for子句進行串列理解。
vars = [
坳
for key in ['Date', 'GMV', 'Grass 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)
Update:
對不起,我誤解了這個問題。如果你需要嵌套的串列,下面的代碼將作業。
vars = list(zip(*(
[col for col in test if key in col ]
for key in ['Date', 'GMV', '毛收入']
)))
如果你已經在使用DataFrame,@Corralien的答案會更好。當你想用vanilla Python來做的時候,這個答案是很有用的。
uj5u.com熱心網友回復:
如果輸入串列是:
>>> 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'/span>, 'c2'/span>], ['a3'/span>, 'b3'/span>, 'c3'/span>]]
為了便于理解:嘗試內回圈的結果,i=0然后i=1 ...
>>> i = 0
>>> [test[x][i] for x in range(len(test)>)]
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/325738.html
標籤:
