Python Pandas Dataframe选择使用" in"操作者

时间:2017-11-24 21:54:26

标签: python pandas dataframe

最近,我一直处理一个可能很难解决的问题,但在尝试这样做之后,我决定寻求帮助。

所以,我有这两个数据帧:

df = pd.DataFrame({
    'AlleleID': [1, 2, 3, 4],
    'Name': ['a', 'b', 'c', 'd'],
    'VariationID':[[1,5,6],[2],[3,7],[4]]
})

df_reviews = pd.DataFrame({
    'VariationID': [1, 1, 1, 2, 3, 3, 4, 5, 5, 6, 7],
    'Stars': [1, 0, 1, 1, 1, 0, 4, 3, 1, 1, 0],
    'Source': ['literature', 'clinical', 'inlab', 'inlab', 'literature', 'clinical', 'inlab', 'inlab', 'inlab',\
          'literature', 'literature']
})

目的是将其应用于更大的数据集。我创建了尽可能多的列,然后用零填充它们,将它们添加到df数据集中。对于df_reviews数据集中的每一行,我想使用VariationID列的值来知道此引用的df数据集中的哪一行,然后我想使用该行的其他两个元素(启动数和来源)知道我指的是df中的哪一列。然后我只想将值增加一个。

目标只是计算使用" Stars"的不同组合的条目数量。和"来源"存在于df_reviews数据帧中,用于每个不同的" AlleleID"在df中,但是df中的每一行都可以连接到df_reviews中的多个不同的行,因为它有一个VariationID列表。

我使用了以下代码,我收到了错误" KeyError:True"

star_values = df_reviews['Stars'].unique()
source_values = df_reviews['Source'].unique()

col_names = []

for e in star_values:
    for f in source_values:
        col_name = 'reviews_stars_%s_source_%s' % (e, f)
        col_names.append(col_name)

    col_name = 'reviews_stars_%s' % (e)
    col_names.append(col_name)

for name in col_names:
    df[name] = np.zeros(len(df), dtype = int)

for row in df_reviews.itertuples(index = False, name = None):
    col_name = 'reviews_stars_%s_source_%s' % (row[0], row[1])
    df.loc[row[2] in df.VariationID,col_name] +=1

print(df)

因此,我需要的是一种有效且快速的方法(因为这将应用于具有500000行的数据帧)以循环遍历df_reviews的每一行,并将df中的相应位置递增1 。

要做到这一点,这是我的问题的主要观点,我将需要基于标签逐行切片,并根据检查外部值是否为&#34;&#34;的布尔结果按行排序34;一行,因为该行的值作为一个列表(大多数情况下一个列表只有一个元素,但有例外,因此我使用该列表格式和&#34; in&#34;方法)< / p>

提前感谢能够提供帮助的任何人。我想对于那些比我更熟悉熊猫的人来说这将是一个非常简单的问题,但它确实让我陷入困境。

这是所需的输出:

    AlleleID Nome VariationID  reviews_stars_1_source_literature  \
0         1    a   [1, 5, 6]                                    2   
1         2    b         [2]                                    0   
2         3    c      [3, 7]                                    1   
3         4    d         [4]                                    0   

   reviews_stars_1_source_clinical  reviews_stars_1_source_inlab  \
0                                  0                               2   
1                                  0                               1   
2                                  0                               0   
3                                  0                               0   

   reviews_stars_1  reviews_stars_0_source_literature  \
0                   4                                    0   
1                   1                                    0   
2                   1                                    1   
3                   0                                    0   

   reviews_stars_0_source_clinical  reviews_stars_0_source_inlab  \
0                                  1                               0   
1                                  0                               0   
2                                  1                               0   
3                                  0                               0   

    reviews_stars_0  reviews_stars_4_source_literature  \
0                   1                                    0   
1                   0                                    0   
2                   2                                    0   
3                   0                                    0   

   reviews_stars_4_source_clinical  reviews_stars_4_source_inlab  \
0                                  0                               0   
1                                  0                               0   
2                                  0                               0   
3                                  0                               1   

   reviews_stars_4  reviews_stars_3_source_literature  \
0                   0                                    0   
1                   0                                    0   
2                   0                                    0   
3                   1                                    0   

   reviews_stars_3_source_clinical  reviews_stars_3_source_inlab  \
0                                  0                               1   
1                                  0                               0   
2                                  0                               0   
3                                  0                               0   

   reviews_stars_3  
0                   1  
1                   0  
2                   0  
3                   0  

tl; dr得到了一个&#34; KeyError:true&#34;尝试通过检查特定值是否为&#34;来尝试从数据帧中选择数据时出错?每行,包含列的行。

0 个答案:

没有答案