分组分组后进行分组切片并绘制子图

时间:2019-05-02 15:39:08

标签: python pandas matplotlib pandas-groupby

我有一个示例数据框,实际上它是一个更大的数据框,并且已根据12个不同的列进行了分组。一些组标签重合。

在使用Groupby将数据框分组后,我无法对其进行切片以进行打印。

我想在A列中绘制所有有car的组的输入和输出,并生成一个图例,以A和B的值标记它们。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
df_test = pd.DataFrame({'A': ['car', 'car', 'car', 'car', 'car', 'car', 'plane', 'plane', 'plane', 'plane', 'plane', 'plane',],
                   'B': ['one','one', 'two', 'two', 'three','three', 'one', 'one', 'two','two',  'three','three',],
                   'Input1': np.random.randn(12),
                   'Output1': np.random.randn(12)})
print(df_test)

grouped = df_test.groupby(['A', 'B'])
fig, ax = plt.subplots()
grouped.plot(x='Input1', y='Output1', ax=ax, legend=False)

所以我在这里绘制所有组,但实际上我只想在A列中绘制包含car的组。

1 个答案:

答案 0 :(得分:0)

尝试一下。 下面的代码是使用groupby之后的。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
df_test = pd.DataFrame({'A': ['car', 'car', 'car', 'car', 'car', 'car', 'plane', 'plane', 'plane', 'plane', 'plane', 'plane',],
                   'B': ['one','one', 'two', 'two', 'three','three', 'one', 'one', 'two','two',  'three','three',],
                   'Input1': np.random.randn(12),
                   'Output1': np.random.randn(12)})
print(df_test)

grouped = df_test.groupby(['A', 'B'])
grouped=grouped.first().reset_index()
grouped=grouped.loc[grouped['A']=='car']
fig, ax = plt.subplots()
grouped.plot(x='Input1', y='Output1', ax=ax, legend=False)
plt.show()

如果您只想过滤A列中等于'car'的值,则可以尝试以下代码。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
df_test = pd.DataFrame({'A': ['car', 'car', 'car', 'car', 'car', 'car', 'plane', 'plane', 'plane', 'plane', 'plane', 'plane',],
                   'B': ['one','one', 'two', 'two', 'three','three', 'one', 'one', 'two','two',  'three','three',],
                   'Input1': np.random.randn(12),
                   'Output1': np.random.randn(12)})
print(df_test)

grouped=df_test.loc[df_test['A']=='car']
fig, ax = plt.subplots()
grouped.plot(x='Input1', y='Output1', ax=ax, legend=False)
plt.show()

更新: 也尝试下面的代码。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
df_test = pd.DataFrame({'A': ['car', 'car', 'car', 'car', 'car', 'car', 'plane', 'plane', 'plane', 'plane', 'plane', 'plane',],
                   'B': ['one','one', 'two', 'two', 'three','three', 'one', 'one', 'two','two',  'three','three',],
                   'Input1': np.random.randn(12),
                   'Output1': np.random.randn(12)})
print(df_test)

grouped=df_test.loc[df_test['A']=='car']
grouped = grouped.groupby(['A','B'])
fig, ax = plt.subplots()
grouped.plot(x='Input1', y='Output1', ax=ax, legend=True)
plt.show()