gpt4 book ai didi

python - 如何按日期在 pandas 中绘制数据并同时进行分组

转载 作者:行者123 更新时间:2023-11-28 22:49:47 25 4
gpt4 key购买 nike

我经常发现自己想要在一列中绘制数据,但发现很难通过第三列对它们进行分组/分隔。

假设我有这样一张纸

enter image description here

我如何在 pandas 中创建相同的情节?

顺便说一句:我喜欢 x 轴是线性的,而不仅仅是一组彼此相邻的日期,因为它给出了关于一组中的测量彼此有多接近的想法 - 但很高兴知道如果距离太远怎么办。

更新

@Ffisegydd 的回答非常有用。然而,我接受答案的速度有点太快了——我在实际的 Excel 工作表上尝试代码时发现了这一点。这个问题完全是我的错,因为我没有提供 Excel 表格。 @Ffisegydd 非常友好地根据我的问题手动创建数据框,但使用 excel 文件有点不同。

我道歉。这是一个 Excel 文件: https://dl.dropboxusercontent.com/u/3216968/Example.xlsx

这是我得到的结果(在 IPython notebook 中)

import pandas as pd
import datetime as dt

path2file = r"C:\Example.xlsx"
_xl = pd.ExcelFile(path2file)
df = pd.read_excel(path2file, _xl.sheet_names[0], header=0)
df

enter image description here

df.Date = df.Date.apply( lambda x: dt.datetime.strptime(x, '%Y.%m.%d').date() )
df

enter image description here

这里是错误的地方:

pd.DataFrame( data= [df.Data, df.Group], columns = ['Data', 'Group'], index=df.Date)

给出这个错误

---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-9-231baa928f67> in <module>()
----> 1 pd.DataFrame( data= [df.Data, df.Group], columns = ['Data', 'Group'], index=df.Date)

C:\Python27\lib\site-packages\pandas\core\frame.pyc in __init__(self, data, index, columns, dtype, copy)
245 index = _default_index(len(data))
246 mgr = _arrays_to_mgr(arrays, columns, index, columns,
--> 247 dtype=dtype)
248 else:
249 mgr = self._init_ndarray(data, index, columns, dtype=dtype,

C:\Python27\lib\site-packages\pandas\core\frame.pyc in _arrays_to_mgr(arrays, arr_names, index, columns, dtype)
4471 axes = [_ensure_index(columns), _ensure_index(index)]
4472
-> 4473 return create_block_manager_from_arrays(arrays, arr_names, axes)
4474
4475

C:\Python27\lib\site-packages\pandas\core\internals.pyc in create_block_manager_from_arrays(arrays, names, axes)
3757 return mgr
3758 except (ValueError) as e:
-> 3759 construction_error(len(arrays), arrays[0].shape[1:], axes, e)
3760
3761

C:\Python27\lib\site-packages\pandas\core\internals.pyc in construction_error(tot_items, block_shape, axes, e)
3729 raise e
3730 raise ValueError("Shape of passed values is {0}, indices imply {1}".format(
-> 3731 passed,implied))
3732
3733 def create_block_manager_from_blocks(blocks, axes):

ValueError: Shape of passed values is (2,), indices imply (2, 12)

或者这样做

pd.DataFrame( {'data': df.Data, 'group': df.Group}, index=df.Date)

enter image description here

最佳答案

您可以创建一个 groupby 对象,然后遍历这些组并绘图。

下面是一些获取数据并绘制两个“组”的代码。还有一些额外的格式可以使图形看起来也不错。

import matplotlib.pyplot as plt
import pandas as pd
import datetime as dt

path2file = r"Example.xlsx"
_xl = pd.ExcelFile(path2file)
df = pd.read_excel(path2file, _xl.sheet_names[0], header=0)

df.Date = df.Date.apply( lambda x: dt.datetime.strptime(x, '%Y.%m.%d').date())
df.index = df.Date # Set the Date column as your index
del df['Date'] # Remove the Date column from your data columns

grouped = df.groupby('Group') # groupby object

# Normally you would just iterate using "for k, g in grouped:" but the i
# is necessary for selecting a color.
colors = ['red', 'blue']
for i, (k, g) in enumerate(grouped):
plt.plot_date(g['Data'].index, g['Data'], linestyle='None', marker='o', mfc=colors[i], label=k)

plt.legend()
plt.gcf().autofmt_xdate() # Format the dates with a diagonal slant to make them fit.

# Pad the data out so all markers can be seen.
pad = dt.timedelta(days=7)
plt.xlim((min(df.index)-pad, max(df.index)+pad))
plt.ylim(0,6)

Plot

关于python - 如何按日期在 pandas 中绘制数据并同时进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23408591/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com