为分组的 pandas 数据框创建散点图
Creating a scatterplot for a grouped pandas dataframe
我有一个 Pandas DataFrame,我想在其中按特定列进行分组。之后,我想制作这个分组数据框的散点图。但是,如果我这样做,我会收到错误消息,因为我分组的列无法识别。
# Data loading, processing and for more
import pandas as pd
import numpy as np
# Visualization
import seaborn as sns
import matplotlib.pyplot as plt
# set seaborn style because it prettier
sns.set()
df = pd.DataFrame(np.random.randint(0,100,size=(100, 4)), columns=list('ABCD'))
df2 = df.groupby(['A']).agg({'D':sum})
df2.plot.scatter(x='A', y='D')
如何创建这样的散点图?
您需要在 groupby
之后重置索引。
import pandas as pd
import numpy as np
# Visualization
import seaborn as sns
import matplotlib.pyplot as plt
# set seaborn style because it prettier
sns.set()
df = pd.DataFrame(np.random.randint(0,100,size=(100, 4)), columns=list('ABCD'))
df2 = df.groupby(['A']).agg({'D':sum})
df2.reset_index(inplace=True)
df2.plot.scatter(x='A', y='D')
进行groupby操作时,默认将groupby操作的列作为索引。在上面的例子中,在 groupby 之后,如果你检查 df2,它的结构将是这样的:
In [2]: df2
Out[2]:
D
A
0 180
1 29
2 52
3 39
4 91
.. ...
93 56
94 17
96 47
98 125
99 214
[61 rows x 1 columns]
要访问列 A,您需要使用 reset_index
将索引作为单独的列。
您可以不将 A
设置为 groupby
中的索引:
# notice the difference `sum` and `'sum'`
# the later is vectorized
df2 = df.groupby(['A'], as_index=False).agg({'D':'sum'})
df2.plot.scatter(x='A', y='D')
或者您可以保留您的代码并使用 plt.scatter
:
df2 = df.groupby(['A']).agg({'D':'sum'})
plt.scatter(df2.index, df2['D'])
我有一个 Pandas DataFrame,我想在其中按特定列进行分组。之后,我想制作这个分组数据框的散点图。但是,如果我这样做,我会收到错误消息,因为我分组的列无法识别。
# Data loading, processing and for more
import pandas as pd
import numpy as np
# Visualization
import seaborn as sns
import matplotlib.pyplot as plt
# set seaborn style because it prettier
sns.set()
df = pd.DataFrame(np.random.randint(0,100,size=(100, 4)), columns=list('ABCD'))
df2 = df.groupby(['A']).agg({'D':sum})
df2.plot.scatter(x='A', y='D')
如何创建这样的散点图?
您需要在 groupby
之后重置索引。
import pandas as pd
import numpy as np
# Visualization
import seaborn as sns
import matplotlib.pyplot as plt
# set seaborn style because it prettier
sns.set()
df = pd.DataFrame(np.random.randint(0,100,size=(100, 4)), columns=list('ABCD'))
df2 = df.groupby(['A']).agg({'D':sum})
df2.reset_index(inplace=True)
df2.plot.scatter(x='A', y='D')
进行groupby操作时,默认将groupby操作的列作为索引。在上面的例子中,在 groupby 之后,如果你检查 df2,它的结构将是这样的:
In [2]: df2
Out[2]:
D
A
0 180
1 29
2 52
3 39
4 91
.. ...
93 56
94 17
96 47
98 125
99 214
[61 rows x 1 columns]
要访问列 A,您需要使用 reset_index
将索引作为单独的列。
您可以不将 A
设置为 groupby
中的索引:
# notice the difference `sum` and `'sum'`
# the later is vectorized
df2 = df.groupby(['A'], as_index=False).agg({'D':'sum'})
df2.plot.scatter(x='A', y='D')
或者您可以保留您的代码并使用 plt.scatter
:
df2 = df.groupby(['A']).agg({'D':'sum'})
plt.scatter(df2.index, df2['D'])