如何将数据帧列describe()的几个结果合并为一个数据帧?

时间:2013-09-23 17:09:53

标签: pandas

我将describe()应用于我的数据帧的几列,例如:

raw_data.groupby("user_id").size().describe()
raw_data.groupby("business_id").size().describe()

还有几个,因为我想知道平均每个用户有多少数据点/中位数等等。

我的问题是,每个调用都返回一些似乎是非结构化输出的东西。有没有一种简单的方法可以将它们全部组合到一个新的数据框中,其中的列将是:[count,mean,std,min,25%,50%,75%,max],索引将是描述的各个列?< / p>

谢谢!

1 个答案:

答案 0 :(得分:0)

我可能只是手动构建一个新的DataFrame。如果你有

>>> raw_data
   user_id  business_id  data
0       10            1     5
1       20           10     6
2       20          100     7
3       30          100     8

然后groupby(smth).size().describe()的结果只是另一个Series

>>> raw_data.groupby("user_id").size().describe()
count    3.000000
mean     1.333333
std      0.577350
min      1.000000
25%      1.000000
50%      1.000000
75%      1.500000
max      2.000000
dtype: float64
>>> type(_)
<class 'pandas.core.series.Series'>

所以:

>>> descrs = ((col, raw_data.groupby(col).size().describe()) for col in raw_data)
>>> pd.DataFrame.from_items(descrs).T
             count      mean      std  min  25%  50%  75%  max
user_id          3  1.333333  0.57735    1    1    1  1.5    2
business_id      3  1.333333  0.57735    1    1    1  1.5    2
data             4  1.000000  0.00000    1    1    1  1.0    1

而不是from_items我可以通过字典,例如 pd.DataFrame({col: raw_data.groupby(col).size().describe() for col in raw_data}).T,但这样就可以保留列顺序而无需考虑它。

如果您不想要所有列,而不是for col in raw_data,则可以定义columns_to_describe = ["user_id", "business_id"] etc并使用for col in columns_to_describe,或使用for col in raw_data if col.endswith("_id")或任何您喜欢的内容。