我有test_df
这样组织:
[in]
# Use the arrays to create a dataframe
testing_df =pd.DataFrame(test_array,columns=['transaction_id','product_id'])
# Split the product_id's for the testing data
testing_df.set_index(['transaction_id'],inplace=True)
print(testing_df.head(n=5))
[out]
product_id
transaction_id
001 (P01,)
002 (P01, P02)
003 (P01, P02, P09)
004 (P01, P03)
005 (P01, P03, P05)
然后我对它进行了一些计算并创建了一个字典来存储结果:
# Initialize a dictionary to store the matches
matches = {}
# Return the product combos values that are of the appropriate length and the strings match
for transaction_id,i in enumerate (testing_df['product_id']):
recommendation = None
recommended_count = 0
for k, count in product_combos.items():
k = list(k)
if len(i)+1 == len(k) and count >= recommended_count:
for product in i:
if product in k:
k.remove(product)
if len(k) == 1:
recommendation = k[0]
recommended_count = count
matches[transaction_id] = recommendation
print(matches)
[out]
{0: 'P09', 1: 'P09', 2: 'P06', 3: 'P09', 4: 'P09', 5: 'P09'}
我遇到的问题是matches
字典的键应该是001,002,003,004,005
等 - 对应于test_df
的索引,即001-100。
我的第二个问题是我想填写另一个字典(recommendations
),键为001-100。我希望通过匹配键值将matches
中的值填充到此dict中。
答案 0 :(得分:2)
这里有几个问题。首先,切换您从enumerate
要求的变量的顺序 - 整数计数器首先出现:
for i, entry in enumerate(values):
...
这就是为什么matches
dict中的键显示为整数的原因。
其次,您仍然需要访问i
的{{1}}元素才能获得您正在寻找的testing_df.index
。您可以使用(已更正)transaction_id
:
i
执行此操作
enumerate()