使用列表中的值以基于现有数据框创建一些新的数据框

Posted

技术标签:

【中文标题】使用列表中的值以基于现有数据框创建一些新的数据框【英文标题】: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”中。

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

注意 托马斯

【问题讨论】:

【参考方案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:“方法”对象不可下标

以上是关于使用列表中的值以基于现有数据框创建一些新的数据框的主要内容,如果未能解决你的问题,请参考以下文章

遍历 pandas 数据框中的行并匹配列表中的元组并创建一个新的 df 列

在数据表或连续表单视图中的表单上,我们如何将第二个组合框中的可能值基于第一个组合框中选择的值?

如何使用 Scala/Spark 添加不基于数据框中现有列的新列? [复制]

Pyspark:如何将现有非空列的元组列表作为数据框中的列值之一返回

根据条件从 spark 数据框中删除行

vba,如何从列表框中的工作表中删除过滤后的数据