簡體   English   中英

將列表作為熊貓數據框中的列值

[英]Take list as column values in pandas dataframe

我有一個如下的數據框:

Card_x  Country Age     Code        Card_y
S       INDIA   Adult   Garments    S,E,D,G,M,A
S       INDIA   Adult   Grocery     D,S,G,A,M,E

我有如下清單:

lis1 = [S,D,G,E,M,A]

現在我希望我的數據框如下:

說明:按 Card_x、Country、Age 分組並將 lis1 值設為“Card_y”

Card_x  Country Age     Card_y
S       INDIA   Adult   S,D,G,E,M,A

我能得到幫助嗎?

注意:計算 lis1 的邏輯如下:

lis1=[]
for i in range(len(t)):
    l=df.Card_y.iloc[i].split(',')
    lis1.append(l)
sorted(lis1[0], key=lambda elem: sum(sublist.index(elem) for sublist in lis1) / len(lis1))

基本上,lis1 獲取不同“代碼”的每個 Card_y 的排名,並獲取平均排名並重新計算平均排名最低的排名。

例如:S 在代碼 - 服裝中排名第一,在代碼 - 雜貨中排名第二。所以平均值是 1+2/2=1.5

D 是代碼 - 服裝的第 3 名,以及代碼 - 雜貨的第 1 名。 所以平均值是 3+1/2=2。

現在基於平均值,最低平均值我得到了排名列表。 所以它將是 S,D,G,E,M,A

嘗試:

df_out = df.groupby(['Card_x','Country','Age'])['Card_y'].apply(lambda x: x.str.split(',', expand=True)
                                                                  .rename(columns = lambda x: x+1)
                                                                  .stack().reset_index(level=1))

df_out = df_out.groupby(['Card_x','Country','Age',0])['level_1'].mean().sort_values().reset_index(level=-1)

df_out.groupby(['Card_x','Country','Age'])[0].agg(','.join).rename('Card_y').reset_index()

輸出:

  Card_x Country    Age       Card_y
0      S   INDIA  Adult  S,D,G,E,A,M

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM