【问题标题】:How to reorder array in Python with / without Pandas?如何在有/没有 Pandas 的情况下在 Python 中重新排序数组?
【发布时间】:2015-09-05 11:52:20
【问题描述】:

为了搜索产品和类别之间的相关性以及下一个可视化(热图),我需要使用 Python 重新排序数组,使用/不使用 Pandas 或其他库:

Book Name, Category 1, Category 2, Category 3, Django 101 Python Web-Dev Beginner ROR Guide Rails Web-Dev Intermediate Laravel PHP Web-Dev Intermediate

进入那个:

Book Name, Python, Web-Dev, Beginner, Rails, PHP, Intermediate Django 101 True True True False False, False ROR Guide False True False False False, True Laravel False True False False True, True

有没有办法做到这一点?数据存入.csv文件,由pandas.read_csv()读取

【问题讨论】:

标签: python pandas


【解决方案1】:

这可以使用 Pandas 中的get_dummies 函数来完成。

df = pd.DataFrame({'Book Name': ['Django 101', 'ROR Guide', 'Laravel'], 'Category 1': ['Python', 'Rails', 'PHP'], 'Category 2': ['Web-Dev']*3, 'Category 3': ['Beginner', 'Intermediate', 'Intermediate']})

dummies = pd.concat([pd.get_dummies(df[c]) for c in df.columns[1:]], axis=1)
df_new = pd.concat([df['Book Name'], dummies], axis=1)

>>> df_new
    Book Name  PHP  Python  Rails  Web-Dev  Beginner  Intermediate
0  Django 101    0       1      0        1         1             0
1   ROR Guide    0       0      1        1         0             1
2     Laravel    1       0      0        1         0             1

或者您可以将 DataFrame 的索引重置为书的名称:

df.set_index('Book Name', inplace=True)
df_new = pd.concat([pd.get_dummies(df[c]) for c in df], axis=1)
>>> df_new
            PHP  Python  Rails  Web-Dev  Beginner  Intermediate
Book Name                                                      
Django 101    0       1      0        1         1             0
ROR Guide     0       0      1        1         0             1
Laravel       1       0      0        1         0             1

【讨论】:

  • 不幸的是我有这样的数据:`书名,类别1,类别2,类别3,Django 101 Python Web-Dev Beginner ROR Guide Rails Intermediate Web-Dev Laravel Beginner Web-Dev PHP `所以它产生列重复
  • 不能完全正确地工作,因为类别可以像这样混合,所以会产生更多重复df = pd.DataFrame({'Book Name': ['Django 101', 'ROR Guide', 'Laravel'], 'Category 1': ['Python', 'Intermediate', 'PHP'], 'Category 2': ['Web-Dev', 'Web-Dev', 'Intermediate'], 'Category 3': ['Beginner', 'Rails', 'Web-Dev']})有什么办法可以避免列重复吗?
  • @sergei 由您来定义分类。为了确保跨类别的唯一性,您可以在列中的每个名称前面加上一个标识符,例如cat1_beginner 将不同于 cat2_beginner。
猜你喜欢
  • 2011-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多