pandas - 熊猫得到一个带有“自定义描述”的数据框
问题描述
我有一个看起来像的数据框
dftest=pd.DataFrame(np.random.randint(0,10,size=(10, 4)), columns=
['w','v1','v2','v3'])
df['x']=np.random.choice(a=[False, True], size=(1, 10), p=[0.5, 0.5])[0]
我想获得一个等于
df.groupby('x').describe()
除了我想要加权平均值
df.groupby(['x']).apply(lambda x: np.average(x['v1'], weights=x['w'], axis=0))
并作为附加列 'std'/('count'-1)
当我尝试
df.groupby(['x']).apply(lambda x: np.average(x[['v1','v2','v3']], weights=x['w'], axis=0))
我得到一个数据框,其中 1 列包含 3 个值的列表,而不是 3 列。
如何将这一切整齐地放入常规数据框中?
解决方案
使用pd.Series
for DataFrame
,如果需要describe
先添加新级别,MultiIndex
然后join
:
df1 = df.groupby('x').describe()
w = df.groupby(['x']).apply(lambda x: pd.Series(np.average(x[['v1','v2','v3']],
weights=x['w'], axis=0), index=['v1','v2','v3']))
w.columns = [w.columns, ['w_mean'] * len(w.columns)]
print (w)
v1 v2 v3
w_mean w_mean w_mean
x
False 4.047619 2.142857 4.714286
True 4.750000 3.937500 3.250000
df1 = df1.join(w).sort_index(axis=1)
print (df1)
v1 v2 \
25% 50% 75% count max mean min std w_mean 25%
x
False 2.25 3.5 6.25 6.0 9.0 4.333333 1.0 3.076795 4.047619 2.00
True 1.75 4.5 7.50 4.0 9.0 4.750000 1.0 3.862210 4.750000 2.75
v3 w \
std w_mean 25% 50% 75% count max mean min
x ...
False ... 3.271085 4.714286 6.50 8.0 8.75 6.0 9.0 7.0 2.0
True ... 3.109126 3.250000 0.75 3.5 6.75 4.0 9.0 4.0 0.0
std
x
False 2.683282
True 4.242641
[2 rows x 35 columns]
推荐阅读
- macos - SCNRenderer 快照并不总是应用抗锯齿
- java - 如何停止索引 Maven“目标”自动生成的文件夹?
- schema - 如何从 icCube 中的 Builder Schema 文件中自动生成多维数据集和维度设计?
- python - Python的while循环平方根问题,返回低小数精度
- c# - c# Windows 窗体中的平滑动画
- python - 属性错误:“NoneType”对象在运行 Flask 时没有属性“app”
- javascript - 如何通过右键单击打开 D3.js 上下文菜单
- javascript - 在 chart.js 中显示 yLabels 的问题
- postgresql - 从 postgresql 中的每一行中删除前导字符
- nginx - 了解 NGINX 的 fastcgi_read_timeout