我可能只是手动构建一个新的 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")
,或任何您喜欢的。