簡體   English   中英

以兩對的形式轉置多列-pandas python

[英]Transpose multiple columns in pairs of two - pandas python

我想轉置多列成對兩列

我有以下幾列:

user_id', 'fullname', 'email', 'handle', 'audience_ethnicities_code0', 'audience_ethnicities_weight0', 'audience_ethnicities_code1', 'audience_ethnicities_weight1', 'audience_ethnicities_code2', 'audience_ethnicities_weight2', 'audience_ethnicities_code3', 'audience_ethnicities_weight3'

其中代碼和權重相關,例如:

用戶 ID = ABCD

'audience_ethnicities_code0' = asian;
'audience_ethnicities_weight0' = 0.4 

'audience_ethnicities_code1' = african; 
'audience_ethnicities_weight1' = 0.2

'audience_ethnicities_code2' = white;
'audience_ethnicities_weight2' = 0.2 

'audience_ethnicities_code3' = hispanic; 
'audience_ethnicities_weight3' = 0.2

總權重 = 1,用戶 ABCD 的受眾是 40% 亞洲人,20% 非洲人等。我想要的是在列和行中為每個用戶設置種族( audience_ethnicities_code_n _種族_代碼_n)他們的權重( audience_ethnicities_weight_n _種族_權重audience_ethnicities_weight_n

我試過這個查詢,但它給了我一個混亂的結果:

df1 = df.pivot_table(index=['user_id', 'fullname', 'email', 'handle'], 
                    columns=['audience_ethnicities_code0', 'audience_ethnicities_code1', 'audience_ethnicities_code2', 'audience_ethnicities_code3'], 
                    values=['audience_ethnicities_weight0', 'audience_ethnicities_weight1', 'audience_ethnicities_weight2', 'audience_ethnicities_weigh3'], aggfunc=lambda x: ' '.join(str(v) for v in x))

df1

有任何想法嗎?

我會迭代地為每一列做數據透視,然后通過它們的索引合並數據幀。

這里有一個例子:

from functools import reduce

index = ['user_id', 'fullname', 'email', 'handle']

dfList = []
for i in range(3):
  dfList.append(df.pivot_table(index=index, 
                               columns='audience_ethnicities_code{}'.format(i), 
                               values='audience_ethnicities_weight{}'.format(i))
                  .rename_axis(None, axis=1)
                  .reset_index())

reduce(lambda x, y: pd.merge(x, y, on=index), dfList)

暫無
暫無

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

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