簡體   English   中英

Pandas-數據透視表由2列生成

[英]Pandas - Pivot Table generated from 2 columns

我正在嘗試僅從兩列數據生成數據透視表結構。 我只有這個通用的DataFrame;

df = pd.DataFrame({'name': ['Australia', 'Japan', 'Brazil'], 'code': ['R1', 'R2', 'R3']})

我想要實現的是在列和索引中都有name字段,並從code字段中獲取連接字符串的值。 這將導致形狀為(3,3)的DataFrame。 本質上,在Australia行和Japan列中具有R1-R2的值,而在Brazil行和Australia列中具有R3-R1的值。

我嘗試使用此函數,但不確定數據pivot_table表在索引和列中pivot_table可以采用相同的值。

pd.pivot_table(df, values='code', index=['name'], columns=['name'], aggfunc=lambda x: '-'.join(x))

從本質上講,輸出應采用這種形式(盡管可能帶有索引和列名),而不應手動生成;

data = {'Australia': ['R1-R1', 'R2-R1', 'R3-R1'],
        'Japan': ['R1-R2', 'R2-R2', 'R3-R2'],
        'Brazil': ['R1-R3', 'R2-R3', 'R3-R3']}

df_result = pd.DataFrame(data, columns=['Australia', 'Japan', 'Brazil'], index=['Australia', 'Japan', 'Brazil'])

謝謝!

一種方式,您可以這樣做:

df1 = df.assign(key=1).merge(df.assign(key=1), how='outer',on='key',suffixes=('','_c'))

df1 = df1.drop('key',axis=1)

df1['value'] = df1['code'] + '-' + df1['code_c']

df2 = df1.drop(['code','code_c'],axis=1)

df_result = df2.set_index(['name','name_c']).unstack()

df_result.columns = df_result.columns.droplevel()

print(df_result)

輸出:

name_c    Australia Brazil  Japan
name                             
Australia     R1-R1  R1-R3  R1-R2
Brazil        R3-R1  R3-R3  R3-R2
Japan         R2-R1  R2-R3  R2-R2

暫無
暫無

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

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