python - 基于现有列向 Pandas DataFrame 添加多个列

标签 python pandas matplotlib

如何用多列标记我的 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 must be a label or position

我的 googlefu 不够强大,无法找到正确的语法。它存在吗?如果存在,它是什么?谢谢

最佳答案

一个选项是将这些列设置为索引然后绘制:

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"]) ]

关于python - 基于现有列向 Pandas DataFrame 添加多个列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62961232/

相关文章:

python - 如何删除数据集中的重复值 : python

python - 有没有办法告诉 matplotlib 放松对绘制数据的缩放?

python - 如何使用 seaborn 为我的 DataFrame 创建堆叠条形图

python - 修复 Pandas 中的一列 RPT 文件

python - Pandas 数据帧错误 : matplotlib. axes._subplots.AxesSubplot

python - 如何在 matplotlib 散点图中设置/获取符号边缘的脊线?

python - 如何在 PyTorch 中使用 numpy 函数作为损失函数并避免在运行时出现错误?

python - 忽略特定时间内的异常情况

python - 从 Python 脚本重定向 subprocess.run() stderr

php - 我们可以让 python 和 php 都使用同一个 apache 服务器吗?