首页 > 解决方案 > 从 pandas DataFrame 中切出唯一的行以存储在单独的 DataFrame 中

问题描述

解决了:

# Split and save all unique parts to separate CSV
for unique_part in df['Part'].unique():
    df.loc[df['Part'] == unique_part].to_csv(f'Part_{unique_part}.csv')

我有一张表格,其中包含零件的生产数据以及在生产过程中记录的变量。我需要为唯一的部分行切出所有列。IE 第 1 部分、第 2 部分和第 3 部分的列的所有列都被切片并放入单独的数据帧中。

格式:

零件 | 变量 1 | 变量 2 等

1-----------X----------------X

1-----------X----------------X

2-----------X----------------X

2-----------X----------------X

2-----------X----------------X

2-----------X----------------X

2-----------X----------------X

2-----------X----------------X

2-----------X----------------X

3-----------X---------------X

3-----------X---------------X

3-----------X---------------X

我已经尝试过创建一个字典来分组

dict = {k: v for k, v in df.groupby('Part')}

这不起作用,因为我无法以正确的格式从 dict 正确转换为 DataFrame

我还尝试创建一个变量来存储所有唯一的零件编号,我只是不知道如何循环通过主数据框来切出每个唯一的零件行部分

part_num = df['Part'].unique()

总之,我需要为每个具有唯一部件号 ID 的行集群创建包含所有变量列的单独数据框。

标签: pythonpandas

解决方案


您可以groupby然后apply将每个组变成一个字典列表,然后将 groupby 变成一个字典,其中每个键都是唯一Part值。

就像是:

df = pd.DataFrame({
    'Part': [1,1,1,3,3,2,2,2],
    'other': ['a','b','c','d','e','f','g','h']
})

d = df.groupby('Part').apply(lambda d: d.to_dict('records')).to_dict()
print d

将打印

{1: [{'Part': 1, 'other': 'a'},
  {'Part': 1, 'other': 'b'},
  {'Part': 1, 'other': 'c'}],
 2: [{'Part': 2, 'other': 'f'},
  {'Part': 2, 'other': 'g'},
  {'Part': 2, 'other': 'h'}],
 3: [{'Part': 3, 'other': 'd'}, {'Part': 3, 'other': 'e'}]}

推荐阅读