如何仅旋转 python 数据框中的特定列

问题描述 投票:0回答:1

我正在尝试创建一个过程,通过可编辑的 pdf 上传某些可编辑的 pdf 数据解析,然后将数据排列在 df 中。我已经设法读取可编辑 pdf 中的数据并将它们放入 df 中,但我遇到了一个问题,其中个人的姓名在 df 中显示为列,而不是每个玩家的单独行,目前的行为每个玩家都显示为 name_#、position_#、country_#...

这不是我使用的实际数据,只是重新创建我面临的场景。

df = pd.DataFrame({
    'Team': ["Bayern", "Barcelona", "Madrid"],
    'region': ["Bravaria", "Barcelona", "Madrid"],
    'title': ["Bundesliga", "Laliga", "Champions Leauge"],
    'name_1': ["Robben", "Messi", "Ronaldo"],
    'Position_1': ["RW", "ST", "ST"],
    'Country_1': ["Netherlands", "Argentina", "Portugal"],
    'name_2': ["Ribery", "Neymar", "Benzema"],
    'Position_2': ["LW", "LW", "RW"],
    'Country_2': ["FRANCE", "Brazil", "France"]})
团队 地区 标题 名称_1 位置_1 国家/地区_1 名称_2 位置_2 国家/地区_2
0 拜仁 布拉瓦利亚 德甲联赛 罗本 RW 荷兰 里贝里 LW 法国
1 巴塞罗那 巴塞罗那 西甲 梅西 ST 阿根廷 内马尔 LW 巴西
2 马德里 马德里 冠军联赛 罗纳尔多 ST 葡萄牙 本泽马 RW 法国

我正在尝试找到一种方法来重新定位 DF,使其看起来像下面共享的 df: 每个团队都有不同的 pdf,但结构都是相同的。

df1 = pd.DataFrame({
    'Team': ["Bayern", "Barcelona", "Madrid", "Barcelona", "Madrid", "Bayern"],
    'region': ["Bravaria", "Barcelona", "Madrid", "Barcelona", "Madrid", "Bravaria"],
    'title': ["Bundesliga", "Laliga", "Champions Leauge", "Laliga", "Champions Leauge", "Bundesliga"],
    'name': ["Robben", "Messi", "Ronaldo", "Neymar", "Benzema", "Ribery"],
    'Position': ["RW", "ST", "ST", "ST", "RW", "LW"],
    'Country': ["Netherlands", "Argentina", "Portugal", "Brazil", "France", "France"]})
团队 地区 标题 名字 位置 国家
0 拜仁 布拉瓦利亚 德甲联赛 罗本 RW 荷兰
1 巴塞罗那 巴塞罗那 西甲 梅西 ST 阿根廷
2 马德里 马德里 冠军联赛 罗纳尔多 ST 葡萄牙
3 巴塞罗那 巴塞罗那 西甲 内马尔 ST 巴西
4 马德里 马德里 冠军联赛 本泽马 RW 法国
5 拜仁 布拉瓦利亚 德甲联赛 里贝里 LW 法国
python pandas pivot
1个回答
0
投票

尝试:

df["name"] = df.filter(regex=r"name_\d+").agg(list, axis=1)
df["country"] = df.filter(regex=r"Country_\d+").agg(list, axis=1)
df["position"] = df.filter(regex=r"Position_\d+").agg(list, axis=1)

print(
    df.explode(["name", "country", "position"])[
        ["Team", "region", "title", "name", "position", "country"]
    ]
)

打印:

        Team     region             title     name position      country
0     Bayern   Bravaria        Bundesliga   Robben       RW  Netherlands
0     Bayern   Bravaria        Bundesliga   Ribery       LW       FRANCE
1  Barcelona  Barcelona            Laliga    Messi       ST    Argentina
1  Barcelona  Barcelona            Laliga   Neymar       LW       Brazil
2     Madrid     Madrid  Champions Leauge  Ronaldo       ST     Portugal
2     Madrid     Madrid  Champions Leauge  Benzema       RW       France
© www.soinside.com 2019 - 2024. All rights reserved.