如何转置Pandas Dataframe 中的某些列[duplicate]

dxxyhpgq  于 2022-12-09  发布在  其他
关注(0)|答案(2)|浏览(112)

此问题在此处已有答案

How can I pivot a dataframe?(5个答案)
2天前关闭。
当前有一个如下所示的 Dataframe :
| 代表姓名|小时数|原因|
| - -|- -|- -|
| 若翰|四个|研究部|
| 若翰|十五|培训|
| 马特|六个|项目人工|
| 马特|10个|培训|
我想将每个原因转置为一列,其中Hours值为如下所示的值:
| 代表姓名|研究部|培训|项目人工|
| - -|- -|- -|- -|
| 若翰|四个|十五|第0页|
| 马特|第0页|10个|六个|
我试着转置和融化 Dataframe ,但没能弄清楚。我还是有点新手,任何帮助都将不胜感激。

e1xvtsh3

e1xvtsh31#

您可以使用pd.pivot_table执行此操作,如下所示:

>>> df.pivot_table(index="RepName", columns="Reason", values="Hours", fill_value=0)
Reason   Project Labor  Research  Training
RepName
John                 0         4        15
Matt                 6         0        10

完整示例:

import pandas as pd

input_data = pd.DataFrame(
    {
        "RepName": ["John", "John", "Matt", "Matt"],
        "Hours": [4, 15, 6, 10],
        "Reason": ["Research", "Training", "Project Labor", "Training"],
    }
)

output_data = pd.DataFrame(
    {
        "Project Labor": [0, 6],
        "Research": [4, 0],
        "Training": [15, 10],
    },
    index=["John", "Matt"],
)

pivoted = input_data.pivot_table(
    index="RepName",
    columns="Reason",
    values="Hours",
    fill_value=0,
)

assert output_data.equals(pivoted)
wfveoks0

wfveoks02#

这是一个.pivot操作。透视的目的是将行的某个子集转换为它们自己的列。

out = df.pivot(index='RepName', columns='Reason', values='Hours').fillna(0)
Reason   Project Labor  Research  Training
RepName                                   
John               0.0       4.0      15.0
Matt               6.0       0.0      10.0

print(out)
Reason   Project Labor  Research  Training
RepName                                   
John               0.0       4.0      15.0
Matt               6.0       0.0      10.0

如果您不熟悉具有名称的pandas.Index,则可以通过从列索引中删除名称并重置行索引来获得更熟悉的结果:

out = (
    df.pivot(index='RepName', columns='Reason', values='Hours')
    .rename_axis(columns=None)
    .reset_index()
    .fillna(0)
)

print(out)
  RepName  Project Labor  Research  Training
0    John            0.0       4.0      15.0
1    Matt            6.0       0.0      10.0

相关问题