python中的数据咀嚼

python中的数据咀嚼,python,pandas,Python,Pandas,我有一个数据如下所示: UserID region1 region 2 region 3 Conditionid 0 0 NaN NaN NaN NAN 1 693 2 1 NaN NAN 2 709 1

我有一个数据如下所示:

   UserID        region1      region 2          region 3       Conditionid
0       0            NaN        NaN             NaN            NAN
1     693              2          1             NaN            NAN
2     709              1        NaN             NaN            100
3     730            NaN        NaN             NaN            NAN
4     840            NaN        NaN              5             100
from __future__ import division
for i in range(1, 4):
    column = 'Region' + str(i)
    print column
    numerator = df[~(df[column].isnull()) & (df['Conditionid'] == 100)][column].count()
    denominator = df[~df[column].isnull()][column].count()
    print numerator / denominator
此处区域列中的数字表示访问次数

现在我想计算一个度量a,在访问过该区域的用户中,有多少百分比的用户具有conditionid等于10的特定条件。因此,必须对每个列(区域)执行此操作。 一个区域的简单逻辑如下:

if region 1 != NA and conditionid=100 then count=count +1`. 

一旦我有了这个数字,我就要除以区域1的访问量。因此,首先我们必须在第一列逐行迭代,然后在第二列(region2)再次逐行迭代,以此类推。现在的问题是如何以上面提到的方式进行迭代,以及如何为每个区域存储度量A?我认为pandas中有一些内置的机制,但不确定。

使用pandas时,不应该遍历行。几乎您将面临的每个问题都可以使用布尔逻辑和/或矢量化操作来解决

d = {'UserID' : [0, 693, 709, 730, 840],
 'Region1' : [np.nan, 2, 1, np.nan, np.nan],
 'Region2' : [np.nan, 1, np.nan, np.nan, np.nan],
 'Region3' : [np.nan, np.nan, np.nan, np.nan, 5],
 'Conditionid' : [np.nan, np.nan, 100, np.nan, 100]}
df = pd.DataFrame(d)
然后,您可以应用一些布尔逻辑来查找您感兴趣的计数:

df[~(df['Region1'].isnull()) & (df['Conditionid'] == 100)]['Region1'].count()
注意,
~
表示不正确。所以,在本例中,不是isnull

如果要遍历特定列,可以执行以下操作:

   UserID        region1      region 2          region 3       Conditionid
0       0            NaN        NaN             NaN            NAN
1     693              2          1             NaN            NAN
2     709              1        NaN             NaN            100
3     730            NaN        NaN             NaN            NAN
4     840            NaN        NaN              5             100
from __future__ import division
for i in range(1, 4):
    column = 'Region' + str(i)
    print column
    numerator = df[~(df[column].isnull()) & (df['Conditionid'] == 100)][column].count()
    denominator = df[~df[column].isnull()][column].count()
    print numerator / denominator

这将创建“Region1”到“Region3”,并总结我认为您正在寻找的内容。如果没有,这至少应该给你一个好的起点。

你应该修改问题的标题,使之更具体一些。像“数据帧上的条件算术”这样的东西可能被认为只属于数据咀嚼的一般主题。您想分享一下关于应该采用什么方法来解决这个问题的想法吗?一般来说,您不想遍历数据帧。查看
apply
方法:。此外,stackoverflow的目的是为将来可能有类似问题的读者提供一个资源。目前有7100多个问题。你现在读到的标题根本不会帮助未来的读者理解这个问题的主题。