通过创建具有两列的新pandas DataFrame的条件拆分单列

时间:2013-04-08 07:30:13

标签: python pandas

我想将一个包含值的列,通过条件分成两列,然后为这些分布生成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"))

1 个答案:

答案 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')

enter image description here

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