将熊猫数据框值组转换为多个列表

时间:2020-05-08 19:14:58

标签: python pandas

我有pandas数据框,其中列出了项目并对其进行了分类:

col_name    |col_group
-------------------------
id          | Metadata
listing_url | Metadata
scrape_id   | Metadata
name        | Text
summary     | Text
space       | Text

要重现:

import pandas

df = pandas.DataFrame([
    ['id','metadata'],
    ['listing_url','metadata'],
    ['scrape_id','metadata'],
    ['name','Text'],
    ['summary','Text'],
    ['space','Text']],
    columns=['col_name', 'col_group'])

您能否建议我如何基于“ col_group”将此数据框转换为多个列表:

Metadata = ['id','listing_url','scraping_id]
Text = ['name','summary','space']

这是为了让我可以将这些列列表传递给panda并删除列。

我在Google上搜索了很多东西,被卡住了:所有答案都是关于将列表转换为df,反之亦然。我应该转换成词典还是列表列表?

我有100多行,属于10个类别,所以要避免手动进行硬编码。

3 个答案:

答案 0 :(得分:2)

赞:

In [245]: res = df.groupby('col_group', as_index=False)['Col_name'].apply(list)

In [248]: res.tolist()                                                                                                                                                                                      
Out[248]: [['id', 'listing_url', 'scrape_id'], ['name', 'summary', 'space']]

答案 1 :(得分:1)

我已经尝试了以下代码:

import pandas

df = pandas.DataFrame([
    [1, 'url_a', 'scrap_a', 'name_a', 'summary_a', 'space_a'],
    [2, 'url_b', 'scrap_b', 'name_b', 'summary_b', 'space_b'],
    [3, 'url_c', 'scrap_c', 'name_c', 'summary_c', 'space_ac']],
    columns=['id', 'listing_url', 'scrape_id', 'name', 'summary', 'space'])
print(df)

for row in df.iterrows():
    print(row[1].to_list())

给出以下答案:

[1, 'url_a', 'scrap_a', 'name_a', 'summary_a', 'space_a']
[2, 'url_b', 'scrap_b', 'name_b', 'summary_b', 'space_b']
[3, 'url_c', 'scrap_c', 'name_c', 'summary_c', 'space_ac']

您可以使用

for row in df[['name', 'summary', 'space']].iterrows():

仅遍历特定列。

答案 2 :(得分:1)

my_vars = df.groupby('col_group').agg(list)['col_name'].to_dict()

输出:

>>> my_vars
{'Text': ['name', 'summary', 'space'], 'metadata': ['id', 'listing_url', 'scrape_id']}

建议使用my_vars['Text']来访问Text,以此类推。如果必须作为不同的名称,则可以将其强制应用于目标范围,例如globals

globals().update(df.groupby('col_group').agg(list)['col_name'].to_dict())

结果:

>>> Text
['name', 'summary', 'space']
>>> metadata
['id', 'listing_url', 'scrape_id']

但是我建议您这样做,因为您可能会无意间覆盖了其他一些对象,或者它们可能不在您所需的适当范围内(例如locals)。