我将describe()应用于我的数据帧的几列,例如:
raw_data.groupby("user_id").size().describe()
raw_data.groupby("business_id").size().describe()
还有几个,因为我想知道平均每个用户有多少数据点/中位数等等。
我的问题是,每个调用都返回一些似乎是非结构化输出的东西。有没有一种简单的方法可以将它们全部组合到一个新的数据框中,其中的列将是:[count,mean,std,min,25%,50%,75%,max],索引将是描述的各个列?< / p>
谢谢!
答案 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")
或任何您喜欢的内容。