假设我有个不同大小的数据集,例如X_1 = [1,2,3]
和X_2 = [4,5,6,7,8]
。我想创建一个具有摘要变量(均值,std等)的数据框,每行一个数据集,每列统计一次。如何在熊猫中做到这一点?
答案 0 :(得分:5)
我将使用describe
df=pd.concat([pd.Series(x) for x in [X_1, X_2]], axis=0, keys=['X_1', 'X_2'])# notice here I am using axis=0 rather than 1
df.groupby(level=0).describe()
Out[442]:
count mean std min 25% 50% 75% max
X_1 3.0 2.0 1.000000 1.0 1.5 2.0 2.5 3.0
X_2 5.0 6.0 1.581139 4.0 5.0 6.0 7.0 8.0
特殊情况
X_1 = [1,2,np.nan]
X_2 = [4,5,6,7,8]
df=pd.concat([pd.Series(x) for x in [X_1, X_2]], axis=0, keys=['X_1', 'X_2'])
df.groupby(level=0).size()
Out[445]:
X_1 3
X_2 5
dtype: int64
答案 1 :(得分:2)
您可以将Series
连接到DataFrame
,然后使用.agg
。会插入NaN
来填充不等长的单元格,但是默认情况下,大多数pandas
agg函数在计算时都会忽略它们。
import pandas as pd
df = pd.concat([pd.Series(x) for x in [X_1, X_2]], axis=1, keys=['X_1', 'X_2'])
df.agg(['mean', 'std']).T
# mean std
#X_1 2.0 1.000000
#X_2 6.0 1.581139
如果列表很多,最好将它们保存在字典中,以避免分别写出键和列表