我想将一个包含值的列,通过条件分成两列,然后为这些分布生成pmf并绘制为直方图。
鉴于列a
,通过条件创建具有生成的2列的新数据框的最佳方法是什么?
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"))
答案 0 :(得分:2)
您可以使用加入,但这实际上取决于您要查找的结果类型。
创建一个连接的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的直方图函数。 Numpy也有直方图功能。