根据dataframe Python中两列的条件在matplotlib中绘制多个绘图?

2024-09-29 01:25:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下数据帧。您可以看到每个岛的id都有一个或多个位置id。这个数据帧是真实数据帧的一个非常小的样本(13000000行和4列)

df = {'location_id': [1,1,1,2,2,2,3,3,3,4,4,4,5,5,5,6,6,6,7,7,7,8,8,8],
    'timestamp':['2020-05-26 22:00:52','2020-05-26 22:01:52','2020-05-26 22:02:52',
    '2020-05-26 22:00:52','2020-05-26 22:01:52','2020-05-26 22:02:52',
    '2020-05-26 22:00:52','2020-05-26 22:01:52','2020-05-26 22:02:52',
    '2020-05-26 22:00:52','2020-05-26 22:01:52','2020-05-26 22:02:52',
    '2020-05-26 22:00:52','2020-05-26 22:01:52','2020-05-26 22:02:52',
    '2020-05-26 22:00:52','2020-05-26 22:01:52','2020-05-26 22:02:52',
    '2020-05-26 22:00:52','2020-05-26 22:01:52','2020-05-26 22:02:52',
    '2020-05-26 22:00:52','2020-05-26 22:01:52','2020-05-26 22:02:52'],
    'temperature_value': [20,21,22,23,24,25,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44],
    'humidity_value':[60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83],
    'island_id':[10,10,10,20,20,20,20,20,20,30,30,30,30,30,30,30,30,30,40,40,40,40,40,40]}
dataframe = pd.DataFrame(df)

我在这里试图实现的是绘制至少有2个位置id的所有岛屿id的温度值。例如,岛屿id=30包含位置id=[4,5,6]。所以在这种情况下,我应该在同一个图中,在时间戳的x轴上,绘制位置6、7和8的所有温度值。因此,在我的情况下,我预计会得到20或30个子地块。每个图将显示同一个岛上位置的温度值,作为时间戳的函数。因此,对于一个岛id有3个位置,这3个位置的温度值应显示在图中(3条曲线)。(注:各地块应相互下方,如子地块)

有没有一种用Python实现的方法?如果有人能给我一个解决方案,我将不胜感激:)


Tags: 数据iddfvalue时间绘制情况location
2条回答

.groupbyfilter'location\u id',其计数等于或大于三个,进入新的datframe

df2=df.groupby('island_id').filter(lambda x:x.location_id.nunique()>=2)

密谋

g=df2.groupby(['location_id','island_id'])
for x, df in g:
    df.plot(kind='bar', x='timestamp',y=['temperature_value', 'humidity_value'])
    plt.title(x)

设计^{}方法的理想情况。基本上,您可以按island_id分组,然后迭代单个组并使用以下条件绘图:

import pandas as pd
import matplotlib.pyplot as plt

df = {'location_id': [1,1,1,2,2,2,3,3,3,4,4,4,5,5,5,6,6,6,7,7,7],
'timestamp':['2020-05-26 22:00:52','2020-05-26 22:01:52','2020-05-26 22:02:52',
'2020-05-26 22:00:52','2020-05-26 22:01:52','2020-05-26 22:02:52',
'2020-05-26 22:00:52','2020-05-26 22:01:52','2020-05-26 22:02:52',
'2020-05-26 22:00:52','2020-05-26 22:01:52','2020-05-26 22:02:52',
'2020-05-26 22:00:52','2020-05-26 22:01:52','2020-05-26 22:02:52',
'2020-05-26 22:00:52','2020-05-26 22:01:52','2020-05-26 22:02:52',
'2020-05-26 22:00:52','2020-05-26 22:01:52','2020-05-26 22:02:52'],
'temperature_value': [20,21,22,23,24,25,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41],
'humidity_value':[60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80],
'island_id':[10,10,10,20,20,20,20,20,20,30,30,30,30,30,30,30,30,30,40,40,40]}

df = pd.DataFrame(df)
df['timestamp'] = pd.to_datetime(df['timestamp'])

print(df)

grouped = df.groupby('island_id')

for isl_id, df_isl in grouped:
    loc_ids = df_isl['location_id'].unique()
    if len(loc_ids) >= 3:
        loc_id_grouped = df_isl.groupby('location_id')
        fig, ax = plt.subplots()
        for id, df_id in loc_id_grouped:
            x = df_id['timestamp']
            y = df_id['temperature_value']
            ax.plot(x, y)

ax.set_xlabel('location_id')
ax.set_ylabel('temperature_value')

plt.show()

这将创建三个绘图,每个location_id一个

相关问题 更多 >