从pandas DataFrame中截取唯一行以存储在单独的DataFrame中

问题描述 投票:0回答:2

解决了:

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

我有一个表格,其中包含零件的生产数据以及生产过程中记录的变量。我需要切出所有列的唯一部分行。 I.E部分#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的每个行集群创建具有所有变量列的单独数据帧。

python pandas
2个回答
2
投票

您可以groupby然后apply将每个组转换为dicts列表,然后将groupby转换为dict,其中每个键是唯一的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
投票

认为你与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
© www.soinside.com 2019 - 2024. All rights reserved.