基于现有列在Pandas DataFrame中添加多列

3

如何使用多列标记x轴?以下是可行的示例:

df = pd.DataFrame({"player_name": ["Alan","Bob","Carl","Dan","Earl"],
                   "jersey_number": ['1','2','3','4','5'],
                   "hits" : [2,3,1,2,4],
                   "at_bats" : [7,6,8,7,8]
                  })
df["label"] = df["player_name"]+"-"+df["jersey_number"]
df.plot(x="label", y=["hits", "at_bats"])
plt.show()

但这有一些弱点。首先,创建 label 列的示例代码行很繁琐。其次,字符串拼接非常棘手。如果 jersey_number 不是字符串(例如是整数),那么拼接会失败。我可以编写一个子过程来获取列列表,将它们全部转换为字符串,并将它们连接起来。虽然这似乎是不必要的,但应该有一些内置的方法可以做到这一点,类似于:

df = pd.DataFrame({"player_name": ["Alan","Bob","Carl","Dan","Earl"],
                   "jersey_number": ['1','2','3','4','5'],
                   "hits" : [2,3,1,2,4],
                   "at_bats" : [7,6,8,7,8]
                  })
df.plot(x=["player_name","jersey_number"], y=["hits", "at_bats"])
plt.show()

这样做不行;它会抛出ValueError: x 必须是标签或位置

我的谷歌搜索能力还不够强大,无法发现正确的语法。它是否存在,如果存在,是什么?谢谢。

1个回答

0
一个选项是将这些列设置为索引,然后绘图:
df.set_index(["player_name","jersey_number"]).plot( y=["hits", "at_bats"])

这提供了

enter image description here

虽然我更喜欢你的第一种方法,因为它提供了更好的表现:

df["label"] = df[["player_name","jersey_number"]].astype(str).agg('-'.join)

或者

df['label'] = [f'{x}-{y}' for x,y in zip(df["player_name"],df["jersey_number"]) ]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接