从熊猫DataFrame切出唯一的行以存储在单独的DataFrame中

时间:2019-04-22 22:47:39

标签: python pandas

已解决:

# 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')

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

FORMAT:

部分|变量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的行簇创建所有变量列的单独数据框。

2 个答案:

答案 0 :(得分:2)

您可以先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'}]}

答案 1 :(得分:1)

使用groupby认为您走在正确的轨道上

df = pd.DataFrame({"Part": [1, 1, 2, 2],
                    "Var1": [10, 11, 12, 13],
                    "Var2": [20, 21, 22, 23]})   
dfg = df.groupby("Part")

df1 = dfg.get_group(1)
df2 = dfg.get_group(2)

您想对数据做什么?您是否真的需要创建一堆单独的数据帧?下面的示例遍历每个组(每个部件号)并打印。您可以使用相同的方法来做某事或从每个组中获取某事而无需创建单独的数据帧。

for grp in dfg.groups:
    print(dfg.get_group(grp))
    print()

输出:

   Part  Var1  Var2
0     1    10    20
1     1    11    21

   Part  Var1  Var2
2     2    12    22
3     2    13    23