python groupby 分组后画多张图
时间: 2023-09-02 08:05:37 浏览: 144
可以使用Python的matplotlib库对每个分组数据分别画图,实现多张图的显示。具体代码可以参考以下示例:
```
import pandas as pd
import matplotlib.pyplot as plt
# 构造示例数据
df = pd.DataFrame({
'group': ['A', 'A', 'B', 'B', 'B', 'C', 'C', 'C'],
'value': [3, 4, 2, 7, 5, 1, 6, 8]
})
# 分组后分别画图
fig, axes = plt.subplots(nrows=len(df['group'].unique()), ncols=1, figsize=(8, 12))
for i, (group, data) in enumerate(df.groupby('group')):
ax = axes[i]
data.plot(kind='bar', ax=ax, title=f'Group {group}')
```
这段代码可以将示例数据按group字段进行分组,然后对每个分组数据分别画柱状图并显示在不同的子图上。实际使用时,需要根据具体情况对代码进行修改。
相关问题
计算生产出货数据来源于那些工单、那些转道数据? 第一个表生产数据是同一个订单一个项次下开了3个工单3个工单分4次转道(转道的意思是转给物流准备发货了的意思),出货的时候只出了3批就把数据全出完了,第二张图是出货数据,想按照先转道先出的原理把出货数据匹配到生产数据,最终生产如下第三个表,能用python或
其他编程语言来实现这个功能。
可以使用Python来实现这个功能,具体的实现步骤如下:
1. 读取第一个表和第二个表的数据,可以使用pandas库来读取和处理数据。
2. 对第一个表的数据进行处理,按照工单和转道号进行排序,同时计算每个工单下的项次数量。
3. 对第二个表的数据进行处理,按照转道号进行排序。
4. 遍历第二个表的每一行数据,查找对应的工单和项次,如果找到了就将出货数量填入第一个表中对应的位置。
5. 将处理后的数据保存为第三个表。
下面是示例代码:
```python
import pandas as pd
# 读取第一个表和第二个表的数据
prod_data = pd.read_excel('prod_data.xlsx')
ship_data = pd.read_excel('ship_data.xlsx')
# 对第一个表的数据进行处理
prod_data = prod_data.sort_values(['工单号', '转道号'])
prod_data['项次数量'] = prod_data.groupby('工单号')['项次号'].transform('count')
# 对第二个表的数据进行处理
ship_data = ship_data.sort_values('转道号')
# 匹配出货数据到生产数据
for i, row in ship_data.iterrows():
prod_row = prod_data[(prod_data['工单号'] == row['工单号']) & (prod_data['项次号'] == row['项次号']) & (prod_data['转道号'] == row['转道号'])].iloc[0]
prod_data.loc[prod_row.name, '出货数量'] = row['出货数量']
# 保存处理后的数据为第三个表
prod_data.to_excel('result.xlsx', index=False)
```
注意,这只是一个简单的示例代码,实际的数据处理过程会更加复杂,需要根据具体的数据格式和业务逻辑来进行调整。
文件路径'C:\\Users/19242/Desktop/python/2/a2.xlsx',库pandas,matplotlib.pyplot,其他用到的python库你可以自行补充
好的,以下是您需要的代码。请注意,我使用的Python库还有numpy。
```python
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# 读取数据
df = pd.read_excel('C:\\Users/19242/Desktop/python/2/a2.xlsx', sheet_name='Sheet1')
# 定义国有与非国有企业
national_enterprises = ['1100', '2000', '2100', '2120']
df['ownership'] = np.where(df['实际控制人性质'].isin(national_enterprises), '国有企业', '非国有企业')
# 根据企业和年份分组计算资产负债率均值和方差
df_grouped = df.groupby(['企业', '年份', 'ownership']).agg({'资产负债率': ['mean', 'var']}).reset_index()
# 绘制散点图和折线图
df_lsr = df[df['指标名称'] == 'LSR']
df_lsr = df_lsr.pivot(index='年份', columns='企业', values='数据')
df_lsr.plot(marker='o', linewidth=2, alpha=0.7, figsize=(10, 6))
plt.title('LSR散点图和折线图')
plt.xlabel('年份')
plt.ylabel('LSR')
plt.grid(True)
# 绘制饼图
df_industry = df.groupby(['行业代码大类', 'ownership']).size().unstack()
df_industry.plot(kind='pie', subplots=True, figsize=(12, 6), autopct='%1.1f%%', legend=False)
plt.title('各行业的饼图')
plt.ylabel('')
plt.subplots_adjust(wspace=0.2)
plt.show()
```
代码执行后,会依次生成三张图。第一张图为LSR的散点图和折线图,第二张图为各行业的饼图,第三张图为各行业的饼图。您可以根据需要对图形进行进一步的处理。
阅读全文