我有一个需要重新表示的数据框。原始数据框将每行作为唯一搜索词,列是所有结果产品。所以每行的长度都不同。
我想将其转换为矩形数据框(在下面的代码中称为矩形),其中行仍然是唯一的搜索术语,但列标题是所有唯一的产品。现在每个元素都是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?
答案 0 :(得分:0)
这会吗?
df = pd.read_csv('C:/Users/.../AshwiniInputData.csv')
rectangle = df.groupby(['product','search term']).\
size().unstack('search term').astype(bool)
答案 1 :(得分:0)
通常,如果要迭代行并将每行视为向量,Pandas Dataframe很好。我建议你使用二维numpy数组。拥有数组后,您可以非常轻松地遍历每一行和每列。以下是示例代码:
`for index, value in ndenumerate( self.cells ):
do_something( value )
self.cells[index] = new_value`