【问题标题】:converting dictionary to binary in python在python中将字典转换为二进制
【发布时间】:2018-02-07 06:16:18
【问题描述】:

我有一个字典,其中键作为我的客户 ID,值作为我的电影 ID。尽管客户已经多次观看同一部电影,但我希望它成为一部。 在这里,我需要将我的字典转换为二进制数据。 在所有行中,我需要客户 ID 和列作为电影 ID,如果客户看过电影,则为 1,否则为 0。

d = {'121212121' : 111, 222, 333, 333,444, 444, '212121212' : 222, 555, 555, 666, '212123322' : 555, 666, 666, 666, 777}

期望的输出:

customer ID 111 222 333 444 555 666 777
121212121   1   1   1   1   0   0   0
212121212   0   1   0   0   1   1   0
121323231   0   0   0   0   1   1   1

我尝试过使用 count vectorizer()

代码:

cv = CountVectorizer()
movies = cv.fit_transform(cust['movies_list'])
cols = cv.vocabulary_
movies_ = pd.DataFrame(movies.toarray(), columns = cols, index = 
cust['customer_id'])
movies_

输出:

customer ID 111 222 333 444 555 666 777
212121212   1   1   2   2   0   0   0
121212121   0   1   0   0   2   1   0
121323231   0   0   0   0   1   3   1

客户 ID 非常匹配,我计算了他观看电影的次数。

【问题讨论】:

标签: python pandas feature-engineering


【解决方案1】:

看来您可以只使用clip_upper 将正值裁剪为 1。

movies_.clip_upper(1)

           111  222  333  444  555  666  777
121212121    1    1    1    1    0    0    0
212121212    0    1    0    0    1    1    0
212123322    0    0    0    0    1    1    1

这是一个以d 开头的替代解决方案。您可以使用pd.get_dummies,然后使用clip_upper

import pandas as pd
df = pd.concat([
          pd.Series(v, name=k).astype(str) for k, v in d.items()  # `d` is your dict
     ], 
     axis=1
)
pd.get_dummies(df.stack()).sum(level=1).clip_upper(1)

           111  222  333  444  555  666  777
121212121    1    1    1    1    0    0    0
212121212    0    1    0    0    1    1    0
212123322    0    0    0    0    1    1    1

【讨论】:

    猜你喜欢
    • 2014-11-07
    • 2015-01-24
    • 2016-08-13
    • 2020-08-06
    • 1970-01-01
    • 1970-01-01
    • 2012-10-16
    • 1970-01-01
    • 2019-08-11
    相关资源
    最近更新 更多