【问题标题】:Loop Through Pandas Dataframe and split into multiple dataframes based on unique column values循环遍历 Pandas 数据框并根据唯一列值拆分为多个数据框
【发布时间】:2021-08-29 13:01:09
【问题描述】:

我有一个保存在列表中的数据框。有没有办法遍历列表以根据列值创建单独的数据框?

例如:转动这个

df

ID Colour Transport
0902 red car
0902 blue car
0105 red car
0105 yellow car
0105 orange boat

到这里:

df1

ID Colour Transport
0902 red car
0902 blue car

df2

ID Colour Transport
0105 red car
0105 yellow car
0105 orange boat

我已经寻找了一种方法来做到这一点,但找不到。有什么想法吗?

【问题讨论】:

  • 请提供足够的代码,以便其他人更好地理解或重现问题。

标签: python pandas


【解决方案1】:

试试这个:

df1 = df.loc[df['ID'] == 0902]
df2 = df.loc[df['ID'] == 0105]

或者这个:

df1, df2 = [group for _, group in df.groupby('ID')]

或者如果你想要动态的:

dct = {f'df{idx}': group for _, group in df.groupby('ID')]}
print(dct)

或者:

dct = {}
for idx, v in enumerate(df['ID'].unique()):
    dct[f'df{idx}'] = df.loc[df['ID'] == v]

print(dct)

对于特定的数据框,像这样打印:

print(dct['df1'])

【讨论】:

    【解决方案2】:

    您可以使用locals()动态创建变量df1df2

    for i, (ID, subdf) in enumerate(df.groupby('ID'), 1):
        locals()[f'df{i}'] = subdf
    

    输出:

    >>> df1
         ID  Colour Transport
    2  0105     red       car
    3  0105  yellow       car
    4  0105  orange      boat
    
    >>> df2
         ID Colour Transport
    0  0902    red       car
    1  0902   blue       car
    

    或者你可以创建一个由组ID索引的字典:

    dfs = dict(list(df.groupby('ID')))
    

    输出:

    >>> dfs['0105']
         ID  Colour Transport
    2  0105     red       car
    3  0105  yellow       car
    4  0105  orange      boat
    
    >>> dfs['0902']
         ID Colour Transport
    0  0902    red       car
    1  0902   blue       car
    

    【讨论】:

      猜你喜欢
      • 2020-09-23
      • 1970-01-01
      • 2020-10-01
      • 1970-01-01
      • 2018-05-30
      • 1970-01-01
      • 2016-06-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多