【问题标题】:Dataframe to multiple dataframes or lists for unique index values数据框到多个数据框或列表以获取唯一索引值
【发布时间】:2022-01-02 10:56:56
【问题描述】:

我有一个包含两列的数据框,我想为第一列中的相同值创建一个包含第二列中所有值的列表。

如果我有一个看起来像这样的数据框:

Type Item
Cars Toyota
Cars Honda
Cars Tesla
Fruits Apple
Fruits Orange
Countries USA
Countries Mexico

所以我希望能够将此数据帧划分为汽车、水果和国家/地区的三个单独的 df。或者我想要一份关于汽车、水果和国家/地区的清单:

Cars = ['Toyota', 'Honda', 'Tesla']
Fruits = ['Apple', 'Orange']
Countries = ['USA, 'Mexico']

这只是一个例子,我的数据框很大,所以我希望有一个函数可以做到这一点,而不必手动输入每个类型。我尝试为 pandas 查找 groupby 函数,但我认为我无法找到如何使用它来做我需要做的事情。

感谢任何帮助。

【问题讨论】:

  • 查看 groupby 功能
  • 我做到了!但我不明白如何在这种情况下正确使用它。
  • 如果没有看到您的任何数据或您编写的任何产生问题的代码,很难回答您的问题。请查看 Jon Skeet 的优秀博文 WRITING THE PERFECT QUESTION 以获取更新问题的指导。有关提出好问题的更详细教程,请参阅 Eric S. Raymond 的网站How To s The Smart Way
  • df.groupby('Type').agg(list)

标签: python pandas dataframe group-by


【解决方案1】:

你可以试试这个:

dict_ = df.groupby('Type').agg(list).T.to_dict()

for key in dict_:
  li_ = dict_.get(key).get("Item")
  globals()[key] = li_

此外,您可以使用本地变量取决于您的范围:

dict_ = df.groupby('Type').agg(list).T.to_dict()

for key in dict_:
  li_ = dict_.get(key).get("Item")
  locals()[key] = li_

你可以得到:

locals()["Cars"]
Out[1]: ['Toyota', 'Honda', 'Teska']

globals()["Cars"]
Out[2]: ['Toyota', 'Honda', 'Teska']

【讨论】:

    【解决方案2】:

    我试图解决你的问题:)

    import pandas as pd
    
    df = pd.DataFrame({'Type': ['Cars', 'Cars', 'Cars', 'Fruits', 'Fruits', 'Countries', 'Countries'],
                       'Item': ['Toyota', 'Honda', 'Tesla', 'Apple', 'Orange', 'USA', 'Mexico']})
    
    grouped = df.groupby('Type')['Item'].apply(lambda tags:','.join(tags)).to_frame()
    grouped['Item'] = grouped['Item'].str.split(',')
    
    print(grouped)
    

    输出:

    【讨论】:

      猜你喜欢
      • 2019-04-05
      • 2022-06-29
      • 2018-12-02
      • 2019-12-06
      • 2020-08-06
      • 1970-01-01
      • 1970-01-01
      • 2019-03-12
      • 2021-10-03
      相关资源
      最近更新 更多