Pandas groupby在剧情中的传说中的对象

hse*_*bie 10 python plot matplotlib pandas

我试图groupby使用代码绘制一个pandas 对象fil.groupby('imei').plot(x=['time'],y = ['battery'],ax=ax, title = str(i))

问题是绘图图例列表['battery']为图例值.如果它为groupby对象中的每个项目绘制一条线,则更有意义的是在图例中绘制这些值.但是我不知道该怎么做.任何帮助,将不胜感激.

数据

                 time             imei  battery_raw
0 2016-09-30 07:01:23  862117020146766        42208
1 2016-09-30 07:06:23  862117024146766        42213
2 2016-09-30 07:11:23  862117056146766        42151
3 2016-09-30 07:16:23  862117995146745        42263
4 2016-09-30 07:21:23  862117020146732        42293
Run Code Online (Sandbox Code Playgroud)

完整代码

for i in entity:
    fil = df[(df['entity_id']==i)]
    fig, ax = plt.subplots(figsize=(18,6))
    fil.groupby('imei').plot(x=['time'],y = ['battery'],ax=ax, title = str(i))  
    plt.legend(fil.imei)
    plt.show()
Run Code Online (Sandbox Code Playgroud)

目前的情节

在此输入图像描述

cph*_*wis 13

略微整理的数据:

    date         time             imei      battery_raw
0 2016-09-30 07:01:23  862117020146766       42208
1 2016-09-30 07:06:23  862117020146766        42213
2 2016-09-30 07:11:23  862117020146766        42151
3 2016-09-30 07:16:23 862117995146745       42263
4 2016-09-30 07:21:23  862117995146745       42293
Run Code Online (Sandbox Code Playgroud)

完整的示例代码:

import matplotlib.pyplot as plt

fil = pd.read_csv('imei.csv', sep=r'\s*', engine='python')
fig, ax = plt.subplots(figsize=(18,6))

for name, group in fil.groupby('imei'):
    group.plot(x=pd.to_datetime(group['time']), y='battery_raw', ax=ax, label=name)

plt.show()
Run Code Online (Sandbox Code Playgroud)

像往常一样,必须将x值转换为日期时间以便绘图正确.您也可以在数据框中执行此操作.

结果,由imei标记:

在此输入图像描述 (注意:编辑以消除我第一次绊倒的奇怪现象.如果您将列表作为y参数传递group.plot,列表ID将用作行标签,可能是当您绘制几个时的一个方便的默认值因变量一次.

#for name, group in fil.groupby('imei'):
#    group.plot(x=['time'], y=['battery_raw'], ax=ax, label=name)
Run Code Online (Sandbox Code Playgroud)

)