【问题标题】:create multiple df in loop based on condition根据条件在循环中创建多个df
【发布时间】:2021-07-25 10:32:45
【问题描述】:

我需要根据条件从 pandas 中更大数据帧的切片创建多个数据帧。必须根据大数据帧的某些行值来命名不同的数据帧。

这是大数据框:

 Id  Valore
ID554    53.0
ID554    43.0
ID522    42.0
ID522    32.0
ID566    26.0

因此,不同的数据帧必须命名为 ID554、ID522、ID566 等。 我试过这个:

id=df['Id'].unique()
for a in id:
 a=df.loc[(df['ID']==a)]

但它不起作用..

【问题讨论】:

    标签: python pandas dataframe for-loop slice


    【解决方案1】:

    你可以使用.groupby:

    dataframes = {}
    for name, g in df.groupby("Id"):
        dataframes[name] = g
    
    # print the data:
    for k, v in dataframes.items():
        print("Name:", k)
        print("-" * 80)
        print(v)
        print()
    

    打印:

    Name: ID522
    --------------------------------------------------------------------------------
          Id  Valore
    2  ID522    42.0
    3  ID522    32.0
    
    Name: ID554
    --------------------------------------------------------------------------------
          Id  Valore
    0  ID554    53.0
    1  ID554    43.0
    
    Name: ID566
    --------------------------------------------------------------------------------
          Id  Valore
    4  ID566    26.0
    

    【讨论】:

      【解决方案2】:

      使用exec

      df = pd.DataFrame({"Id":["ID554","ID554","ID522","ID522","ID566"],"Valore":[53,43,42,32,26]})
      
      for i in df.Id.unique():
          exec(f"{i} = df[df.Id == i]")
      

      以下代码将创建不同的数据框,并以其 ID 的名称将其保存在不同的变量中。

      输出:

      print(ID522)
      
                Id  Valore
          2  ID522      42
          3  ID522      32
      
      print(ID554)
      
             Id  Valore
          0  ID554      53
          1  ID554      43
      
      print(ID566)
      
             Id  Valore
          4  ID566      26
      

      【讨论】:

      • 使用exec 几乎总是一个坏主意。出错的方法太多了。
      • 要求有多个 ID 为名称的子数据框。
      • 另一种方法是制作一个字典来存储这些数据帧,但这不是必需的
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-12-06
      • 1970-01-01
      • 2023-01-19
      • 1970-01-01
      • 2021-12-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多