〈年,月>数据的Pandas箱线图

7ajki6be  于 2022-11-20  发布在  其他
关注(0)|答案(2)|浏览(137)

我有一个包含每天数据的 Dataframe

df = A. B. date
     1. 2. 2016-12-31
     7. 2. 2016-12-22
     4. 3. 2016-12-12
     6. 8. 2017-02-03
     8. 3. 2017-01-31
     1. 0. 2016-12-11

等等。从2016年12月到现在,我每个月大约有100行。我想创建一个sns.boxplot,其中x轴是〈year,month〉,y是B列的值。我该怎么做呢?谢谢

oknwwptz

oknwwptz1#

给定以下数据框:

import io; df = pd.read_csv(io.StringIO('''A. B. date
     1. 2. 2016-12-31
     7. 2. 2016-12-22
     4. 3. 2016-12-12
     6. 8. 2017-02-03
     8. 3. 2017-01-31
     1. 0. 2016-12-11'''), sep=r'[\n\.]', engine='python')
df.rename(columns=str.strip, inplace=True)
df['date'] = pd.to_datetime(df['date'])

只需按日期和月份键分组,您可以通过date列访问这些键。考虑mean)并绘制。

m_df = df.groupby([df['date'].dt.year, df['date'].dt.month])['B'].sum()

mo49yndu

mo49yndu2#

根据你提供的信息我重新创建了你的 Dataframe

import seaborn as sns
import pandas as pd
import matplotlib.pyplot as plt

d = {'A': [1., 7., 4., 6., 8., 1.], 'B': [2., 2., 3., 8., 3., 0.], 'date': ["2016-12-31", "2016-12-22", "2016-12-12", "2017-02-03", "2017-01-31", "2016-12-11"]}
df = pd.DataFrame(data=d)
print(df)

>>>
     A    B        date
0  1.0  2.0  2016-12-31
1  7.0  2.0  2016-12-22
2  4.0  3.0  2016-12-12
3  6.0  8.0  2017-02-03
4  8.0  3.0  2017-01-31
5  1.0  0.0  2016-12-11

然后,我将列转换为datetime,并对值进行排序,使其在图中显示为有序的。

df['date'] = pd.to_datetime(df['date'])
df = df.sort_values('date')
df['date'] = df['date'].dt.strftime('%Y-%m')

>>>
     A    B     date
5  1.0  0.0  2016-12
2  4.0  3.0  2016-12
1  7.0  2.0  2016-12
0  1.0  2.0  2016-12
4  8.0  3.0  2017-01
3  6.0  8.0  2017-02

然后我画了一个简单的boxplot,因为你没有提供更多的信息。

sns.boxplot(data=df, x="date", y="B")

产生了这个图

希望这对你有帮助。

相关问题