【问题标题】:Pivot with Pandas Python to get booleans使用 Pandas Python 旋转以获取布尔值
【发布时间】:2016-08-02 20:01:07
【问题描述】:

我有以下 csv:https://github.com/antonio1695/Python/blob/master/nearBPO/facturas.csv

我使用以下代码创建了一个数据框:

import pandas as pd
df = pd.read_csv("C:/Users/Antonio/Desktop/nearBPO/facturas.csv", encoding = "ISO-8859-1")
df_du = df.iloc[:,[0,5]]
dfv = df_du.groupby('UUID')['Desc'].apply(list)
df2 = dfv.reset_index()

*注意:我在本地获取 csv。

后面的代码是这样的:

    UUID                                       Desc
0   0019A60D-78F8-E341-8D3E-9786201FE017    [TRANSPORTACION DE PASAJEROS]
1   003B8B8F-7017-E441-8C84-8C0EA577E29D    [SERVICIO POR HORA]
2   00536BC1-1B10-4146-A59B-36613090EF10    [CONSUMO Y RENTA DE SALA DE JUNTAS]
3   005BBAEE-ABEC-E341-8CED-15DA22D11F65    [VERIFICACION HOLOGRAMA DOBLE CERO]
4   006C5F2E-CAE0-4498-9288-0241C1949D8A    [C Meg XT Clas CH, Com Whop Q CH, C Meg XT Cla...
5   0075D1FC-996D-4784-9755-2F4598D16163    [Consumo]

我想制作一个数据框,其中将“Desc”列的每个元素作为一列,每个 UUID 作为一行,如果 UUID 中有相应的“Desc”,我将有一个 1(或 True) .

我想要的示例:

UUID                                     Transportacion de pasajeros    Servicio por hora
0019A60D-78F8-E341-8D3E-9786201FE017     1                              0
003B8B8F-7017-E441-8C84-8C0EA577E29D     0                              1

我试图做的是一个 0 的矩阵和一个 if 来制作 1。之后我会合并它并旋转它。但是,由于一些'Desc'是相同的,我不知道我应该做多大。它似乎伴随着合并部分的许多其他缺陷。

【问题讨论】:

  • 你可以试试这个df2['Desc'].str.join('___').str.get_dummies('___')
  • 我确实得到了这些列,但我没有 UUID 作为参考。另外,我没有看到任何1。可能只是因为我没有看到整个基地,我将其导出以搜索1。 @ayhan

标签: python pandas dataframe merge pivot


【解决方案1】:

你可以使用

pd.concat([df2['UUID'], df2['Desc'].str.join('___').str.get_dummies('___')], axis=1)

它返回如下内容:

Out: 
                                   UUID  SERVICIO POR HORA  \
0  0019A60D-78F8-E341-8D3E-9786201FE017                  0   
1  003B8B8F-7017-E441-8C84-8C0EA577E29D                  1   

   TRANSPORTACION DE PASAJEROS  
0                            1  
1                            0  

【讨论】:

  • 成功了,谢谢!虽然需要一段时间才能运行。正常吗?还是有更快的方法?因为后来我用大 1000 倍的东西来做这件事,哈哈。
  • @AntonioLópezRuiz 在分组阶段你可以使用df_du.groupby('UUID')['Desc'].apply('___'.join),最后你可以使用pd.concat([df2['UUID'], df2['Desc'].str.get_dummies('___')], axis=1)。不确定它是否会大大减少时间。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-22
  • 1970-01-01
  • 2011-10-13
  • 2015-12-22
  • 1970-01-01
  • 2016-08-13
  • 1970-01-01
相关资源
最近更新 更多