由2列生成的Pandas透视表

2024-05-26 16:26:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图生成一个pivot表结构,但是只从两列数据中生成。我所拥有的是这个通用的数据帧

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

我要实现的是在列和索引中都有name字段,以及来自{}字段的连接字符串的值。这将产生一个具有形状(3,3)的数据帧。本质上在Australia行和Japan列中有R1-R2的值,Brazil行和Australia列中有{}的值。在

我尝试使用这个函数,但我不确定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'])

谢谢!在


Tags: 数据namedataframedfindextablecodepd
1条回答
网友
1楼 · 发布于 2024-05-26 16:26:27

一种方法,你可以这样做:

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)

输出:

^{pr2}$

相关问题 更多 >

    热门问题