使用pandas索引作为字典键,使用基于匹配键的值填充字典

时间:2017-08-05 19:37:44

标签: python pandas dictionary

我有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中。

1 个答案:

答案 0 :(得分:2)

这里有几个问题。首先,切换您从enumerate要求的变量的顺序 - 整数计数器首先出现:

for i, entry in enumerate(values):
    ...

这就是为什么matches dict中的键显示为整数的原因。

其次,您仍然需要访问i的{​​{1}}元素才能获得您正在寻找的testing_df.index。您可以使用(已更正)transaction_id

中的i执行此操作
enumerate()