Pandas 使用列作为后缀进行透视

2024-04-24

我有一个类似于以下示例的数据框:

Id Type Value_1 Value_2
1234 A 1 2
1234 B 1 2
789 A 1 2
789 B 1 2
567 A 1 2

我想转换以获得以下内容:

Id Value_1_A Value_1_B Value_2_A Value_2_B
1234 1 1 2 2
789 1 1 2 2
567 1 1

总之:使用“类型”列作为后缀复制值列并将数据帧转换为宽格式。

有没有任何干净、简单的方法可以在 pyspark 数据框或 pandas 上执行此操作?


In pandas我们会pivot https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.pivot.html然后折叠多索引Index.map https://pandas.pydata.org/docs/reference/api/pandas.Index.map.html:

new_df = df.pivot(index='Id', columns='Type')
new_df.columns = new_df.columns.map('_'.join)
# Or with an explicit format string like:
# new_df.columns = new_df.columns.map('{0[0]}_{0[1]}'.format)
new_df = new_df.reset_index()

new_df:

     Id  Value_1_A  Value_1_B  Value_2_A  Value_2_B
0   567        1.0        NaN        2.0        NaN
1   789        1.0        1.0        2.0        2.0
2  1234        1.0        1.0        2.0        2.0

数据框和导入:

import pandas as pd

df = pd.DataFrame({'Id': {0: 1234, 1: 1234, 2: 789, 3: 789, 4: 567},
                   'Type': {0: 'A', 1: 'B', 2: 'A', 3: 'B', 4: 'A'},
                   'Value_1': {0: 1, 1: 1, 2: 1, 3: 1, 4: 1},
                   'Value_2': {0: 2, 1: 2, 2: 2, 3: 2, 4: 2}})
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Pandas 使用列作为后缀进行透视 的相关文章

随机推荐