1

我想取一个包含值的列,通过一个条件分成两列,然后为这些分布生成 pmf 并绘制为直方图。

给定一列a,通过创建一个新数据框的条件来拆分该列的最佳方法是什么?

import numpy as np
df = DataFrame(np.random.rand(10, 4), columns=['a', 'b', 'c', 'd'])

我尝试使用原始的过滤系列创建一个新的 DataFrame .. 但这似乎不起作用:

DataFrame([df2[df2.a> 0.5].a, df2[df2.a <= 0.5].a], columns=("a_gt", "a_lt"))
4

1 回答 1

2

您可以使用 join,但这实际上取决于您要查找的结果类型。

创建一个连接的 DataFrame:

import numpy as np
import pandas as pd

df = pd.DataFrame(np.random.normal(loc=.5,scale=.2,size=(1000, 4)), columns=['a', 'b', 'c', 'd'])

df1 = pd.DataFrame(df[df.a> 0.5].a)
df2 = pd.DataFrame(df[df.a<= 0.5].a)

dfjoined = df1.join(df2, lsuffix='_gt', rsuffix='_lt', how='outer')

在同一轴上绘图:

fig, ax = plt.subplots(1,1)

ax.hist(dfjoined.a_gt, bins=10,range=(0,1), color='r')
ax.hist(dfjoined.a_lt, bins=10,range=(0,1), color='b')

在此处输入图像描述

我认为 Pandas 中当前的 hist() 实现缺乏对 bin 大小和范围(?)的良好控制,所以我使用了 matplotlib 的 histogram 函数。Numpy 还有一个直方图功能。

于 2013-04-08T07:59:03.143 回答