【问题标题】:convert a list to column names [duplicate]将列表转换为列名[重复]
【发布时间】:2021-05-14 00:03:06
【问题描述】:

请在附图中找到输入和所需的输出。

【问题讨论】:

  • 附上数据框的截图或使用正确的格式。
  • 是的,我无法理解这个问题
  • 我是新来的,它在我的编辑时代表现得很好。但我添加了一张图片。请看看是否有帮助,如果可能,请也回答。
  • 添加代码以生成输入数据框,以便人们帮助您

标签: python pandas list dataframe


【解决方案1】:

您可以先在爱好列上explode,然后在groupby 名称和爱好上获取count,并将其作为frame,然后只需执行pivoting,其中Name 是索引, Hobbies 包含您想要的新列名,值是给定爱好的count。最后你可以使用fillna(0)NaN 填充为零。

result = df.explode('Hobbies').groupby(['Name', 'Hobbies']).size().\
to_frame('counts').reset_index().\
pivot(index='Name', columns='Hobbies', values='counts').reset_index().fillna(0)
result
Out[16]: 
Hobbies Name  cook  dance  movies  sing
0          A   0.0    1.0     1.0   1.0
1          B   1.0    1.0     1.0   0.0

如果需要,您可以将这些新列合并回原始数据框。

df = df[['Name', 'Hobbies']].merge(result)
df
Out[17]: 
  Name                Hobbies  cook  dance  movies  sing
0    A  [sing, dance, movies]   0.0    1.0     1.0   1.0
1    B  [movies, cook, dance]   1.0    1.0     1.0   0.0

【讨论】:

    【解决方案2】:

    发布了许多答案,但它们似乎无缘无故地复杂

    这就是你的数据框的样子

    import pandas as pd
    
    df = pd.DataFrame([{'Name': 'A', 'Hobbies': ['sing','dance','movies']}, 
                           {'Name': 'B', 'Hobbies': ['movies','cook','dance']}])
    

    这将是我简化事情的方式 -

    # Map out hobbies list to create new hobbies column at same index. 
    
    for index, row in df.iterrows():
        for each_hobby in row.Hobbies:
            df.loc[index, each_hobby] = True
    
    df.fillna(False, inplace=True) # Fill NaN values with False.
    df.replace({False: 0, True: 1}, inplace=True) # Map out False to 0 and True to 1.
    

    输出:

    >>> df
    
    Out[3]: 
       Name         Hobbies       sing  dance  movies  cook
    0    A  [sing, dance, movies]   1      1      1      1
    1    B  [movies, cook, dance]   0      1      1      1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-08
      • 1970-01-01
      • 2020-01-24
      • 2020-11-11
      • 2016-08-29
      • 2021-06-09
      相关资源
      最近更新 更多