【问题标题】:Use values from list in order to create few new Dataframe based on existing one使用列表中的值以基于现有数据框创建一些新的数据框
【发布时间】:2021-10-31 00:28:07
【问题描述】:

我当前的 DF 如下所示

x  y  z  x  c name  status
1  2  3  2  5 Jon   Work
1  2  5  4  5 Adam  Work
9  7  3  9  5 Adam  Holiday
3  2  3  4  5 Anna  Work
1  4  6  8  5 Anna  Work
4  1  6  8  5 Kate  Off
2  1  6  1  5 Jon   Off

我的具有特定值的列表如下所示:

name = [Jon, Adam]

status = [Off, Work]

我需要使用这些列表为“状态”列表中的所有唯一元素创建新的数据框。所以它应该如下所示:

df_off:

x  y  z  x  c name  status
2  1  6  1  5 Jon   Off

只有一个值,因为名称 Kate 不在列表名称中

df_工作:

x  y  z  x  c name  status
1  2  3  2  5 Jon   Work
1  2  5  4  5 Adam  Work

在第二个 DF 中没有“Anna”,因为她不在列表“name”中。

我希望它很清楚。你知道我该如何解决这个问题吗?

注意 托马斯

【问题讨论】:

    标签: python pandas list dataframe for-loop


    【解决方案1】:

    第一部分,使用以下方法过滤您的数据:

    name = ['Jon', 'Adam']
    status = ['Off', 'Work']
    df[df['name'].isin(name)&df['status'].isin(status)]
    

    然后使用groupby 并将输出转换为字典:

    conditions = df['name'].isin(name)&df['status'].isin(status)
    dfs = {'df_%s' % k:v for k,v in df[conditions].groupby('status')}
    

    然后使用以下命令访问您的数据框:

    >>> dfs['df_Work']
       x  y  z  x.1  c  name status
    0  1  2  3    2  5   Jon   Work
    1  1  2  5    4  5  Adam   Work
    

    您甚至可以使用多个组:

    dfs = {'df_%s_%s' % k:v for k,v in df.groupby(['name', 'status'])}
    dfs['df_Adam_Work']
    

    如果您的目标是保存子帧:

    for groupname, df in df[conditions].groupby('status'):
        df.to_excel(f'df_{groupname}.xlsx')
    

    【讨论】:

    • 看起来很棒!谢谢!您是否知道如何将其保存到名为 df_work 和 df_off 的 excel 中?
    • 我正在尝试使用:for i in status: pd.DataFrame(dfs[f'{i}']).to_excel[f'name {i}.xlsx'] 但我收到错误TypeError:“方法”对象不可下标
    猜你喜欢
    • 1970-01-01
    • 2022-07-06
    • 2021-06-10
    • 2019-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-07
    • 1970-01-01
    相关资源
    最近更新 更多