逐个元素填充 Pandas DataFrame 的元素

Fill in elements of Pandas DataFrame element by element

我有一个数据框需要re-represented。原始数据框的每一行都是一个唯一的搜索词,列是所有结果产品。所以每一行都是不同的长度。

我想把它变成一个矩形数据框(在下面的代码中称为矩形),其中行仍然是唯一的搜索词,但列 headers 都是唯一的产品。每个元素现在都将是 1 或 0,以表示该产品是否是该搜索词的结果。

这是我的资料:

AshwiniInput = pd.read_csv('C:/Users/.../AshwiniInputData.csv')
AshwiniInput = AshwiniInput.set_index(keys='search_term_orig',drop = True,verify_integrity=True )    

#Get all unique products as a list
AllProducts = pd.unique(AshwiniInput.values.ravel())
AllProducts = [str(product) for product in (AllProducts)]

def MakeBoolDictOfSearchTermsAndProducts(Term, ProductsRelatedToTerm, AllProducts):
    """
    Use on each search term in AshwiniInput to get dict with 1 or 0 for each product
    """
    returnDict = {}
    for product in AllProducts:
        if product in ProductsRelatedToTerm:
            returnDict[product] = 1
        else:
            returnDict[product] = 0
    return Term, returnDict


rectangle = pd.DataFrame(np.zeros(shape = (len(AshwiniInput.index),len(AllProducts))),
                          index = AshwiniInput.index,
                          columns = AllProducts)

如何将 rectangle 中的每一行和每一列迭代到 运行 我的函数 MakeBoolDictOfSearchTermsAndProducts() 并用结果填充正确的元素?我应该使用申请吗?或地图?或者 apply_map?

这样可以吗?

df = pd.read_csv('C:/Users/.../AshwiniInputData.csv')
rectangle = df.groupby(['product','search term']).\
    size().unstack('search term').astype(bool)

通常,Pandas 如果您想遍历行并将每一行视为一个向量,Dataframe 是不错的选择。我建议您使用二维 numpy 数组。拥有数组后,您可以非常轻松地遍历每一行和每一列。这是示例代码:

`for  index, value in ndenumerate( self.cells ):
    do_something( value )
    self.cells[index] = new_value`