1

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

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

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

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

谢谢!

4

1 回答 1

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"),或任何您喜欢的。

于 2013-09-23T17:21:18.453 回答