【问题标题】:Create smaller dataframes from large dataframe using for loop使用 for 循环从大数据帧创建更小的数据帧
【发布时间】:2020-06-29 16:17:39
【问题描述】:

我有一个数据框,其中包含与特定汽车相关的零件号。我正在尝试使用 for 循环将较大的数据帧(其中包含所有车辆)分解为每个车辆的较小数据帧。我的主要问题是我需要引用车辆名称并将它们放在各自数据框的名称中。例如,我需要将所有 Altima 零件编号放在名为 df2020 Altima 的数据框中

我正在使用下面的代码来完成这个

df4_vehicle_list = df4['Model_Name'].unique()
df4_vehicle_list

此代码返回: array(['2020 年最大值', '2020 年 Altima', '2020 年叶子', '2019 年 Altima', 《2020(.5) 盗贼》、《2020 剑侠情缘》、《2021 穆拉诺》、《2019 探路者》、 '2020 探路者', '2021 盗贼'], dtype=object)

然后我尝试使用下面的代码

for i in df4_vehicle_list:
    name = df4['Model_Name'] == i
    df[i] = df4[name]

【问题讨论】:

标签: python-3.x pandas loops dataframe filtering


【解决方案1】:

IIUC,这就是您要找的。 == 测试相等,而 = 用于赋值。因此 for 行之后的第一行创建了每个模型模型的 df 切片。下一行将迭代变量 i 的值分配给 Model Name 列。

df_list = []

for i in df4_vehicle_list:
    df = df4.loc[df4['Model_Name'] == i]
    df['Model_Name'] = i

    df_list.append(df)

concatted_df = pd.concat(df_list)

【讨论】:

  • 这段代码不太好用。我只剩下 2021 Rogue 数据,因为代码在 i 的每次迭代中都覆盖了 df。我正在寻找数据框名称中的“Model_Name”。另外,我认为我需要删除“Model_Name”中的空格才能引用 df(df 名称不喜欢空格)。
  • 我最初的答案只是针对问题的分配部分。我对其进行了编辑以避免像您描述的那样覆盖问题,但是如果没有样本数据,很难确认一切正常。可以添加少量的样本数据吗?如果您愿意,我会确保此解决方案适合您。
猜你喜欢
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-15
  • 1970-01-01
  • 1970-01-01
  • 2014-08-05
相关资源
最近更新 更多