通过在另一个数据框中查找列值来列出理解更新数据框

时间:2018-07-19 15:52:53

标签: python-2.7 pandas numpy

我对熊猫还很陌生,所以请原谅我是否已存在要执行的功能,或者我打算用错误的方式进行操作。

此刻我正在使用两个数据帧:

  

df_xmlTxt(index = ['curid','title','text','cat'])

     

df_xmlCategories(index = ['curid','cat_1','cat_2',...,'cat_n']   )

cat是指类别,其中df_xmlTxt中每一行的“ cat”值都是类别列表。

我想将df_xmlCategories数据帧填充到每个类别列的每一行都具有true / false值的地方。

我已经写了一些我认为可以解决问题的代码,但是我遇到了错误。到目前为止,df_xmlCategories是其他数据框的ID列以及附加到此列的类别(其中每个类别列的值为0)的副本。这是最后一行不起作用,我需要更改

# Create categories dataframe for all articles and populate

df_xmlCategories = df_xmlTxt[['curid']].copy()
cat = dict.fromkeys(getAllCats(), 0)
df_xmlCategories = df_xmlCategories.assign(**cat)

# Update all boolean values for every categorys

df_xmlCategories = [[df_xmlCategories.loc[j][curId] = 1 for j in (df_xmlTxt.loc['cat'][curId].values.tolist())] for curId in df_xmlCategories['curId']]

任何建议/不同的处理方式将不胜感激

修改: 为了清楚起见,两个表如下所示: df_xmlTxt

df_xmlCategories

我的目标是为该行的curID属于该类别的所有单元格提供一个真实的布尔值

1 个答案:

答案 0 :(得分:0)

因此,首先需要将cat列表分成几行。 我使用了的答案here

d = {'curid': [1,3,5], 'cat': [['cat_1','cat_2'], 
                              ['cat_2','cat_3','cat_4'], 
                              ['cat_1','cat_3']]}
df_xmlTxt = pd.DataFrame(data=d)

df_xmlTxt = df_xmlTxt.set_index('curid')
df_xmlTxt = df_xmlTxt.cat.apply(pd.Series)
                         .stack()
                         .reset_index(level=1,drop=True)
                         .to_frame('cat')

您最终得到这个:

        cat
curid   
1      cat_1
1      cat_2
3      cat_2
3      cat_3
3      cat_4
5      cat_1
5      cat_3

您添加了一个虚拟变量value用于pivot

df_xmlTxt['value'] = 1
df_xmlCategories = df_xmlTxt.pivot(columns='cat', values='value')

然后您通过取反False将空单元格转换为True,而不将空单元格转换为isnull

~df_xmlCategories.isnull()

cat   cat_1   cat_2   cat_3   cat_4
curid               
1     True    True    False   False
3     False   True    True    True
5     True    False   True    False

编辑:考虑到cat是类别列表。