用panda帮我处理下这个csv文件。
逻辑就是capability A, 由FingerGrasping, ForceApplying, Moving, Releasing组成,能不能在下面csv中,自动找到所有组合?并且限制是,ForceApplying 和Moving的DeviceID 需要一致。
同理,capability B, 由FingerGrasping, Moving, Realesing 组成,需要找到所有的组合。
capability C, Fixturing, MillingToolFunction, Spiining,Moving, ForceApplying 组成。
我的现在csv的第一列 相当于是子技能。 父技能由多个技能组成。比如capabilityA 由FingerGrasping, ForceApplying, Moving, Releasing。 但是 有个限制,就是ForceApplying 和 Moving 对应的deviceID应该一致,可以理解为是同一个device有两个子技能。
现在想要做的, 把capabilityA 由FingerGrasping, ForceApplying, Moving, Releasing。 所有排列组合找出来,并放在csv中
Capability name Type SimpleSkillID Device DeviceID
Moving Moving 1 KUKA KR 270 R2700 ultra R - 1
Moving Moving 2 KUKA KR 270 R2900 K ultra R - 2
Moving Moving 3 ABB IRB 6700-150/3.20 R - 3
Moving Moving 4 ABB IRB 6700-150/3.20 LeanID R - 4
Moving Moving 5 ABB IRB 6700-155/2.85 R - 5
Moving Moving 6 Fanuc M-800iA/60 R - 6
Moving Moving 7 Fanuc M-900iA/350 R - 7
Moving Moving 8 Fanuc M-900iB/280 R - 8
Moving Moving 9 Fanuc M-900iB/360 R - 9
Moving Moving 10 Fanuc M-900iB/400L R - 10
Moving Moving 11 Fanuc M-900iB/700 R - 11
Moving Moving 12 Fanuc M-2000iA/900L R - 12
Moving Moving 13 Fanuc M-2000iA/1700L R - 13
Moving Moving 14 Fanuc M-2000iC/210R R - 14
ForceApplying ForceApplying 15 KUKA KR 270 R2700 ultra R - 1
ForceApplying ForceApplying 16 KUKA KR 270 R2900 K ultra R - 2
ForceApplying ForceApplying 17 ABB IRB 6700-150/3.20 R - 3
ForceApplying ForceApplying 18 ABB IRB 6700-150/3.20 LeanID R - 4
ForceApplying ForceApplying 19 ABB IRB 6700-155/2.85 R - 5
ForceApplying ForceApplying 20 Fanuc M-800iA/60 R - 6
ForceApplying ForceApplying 21 Fanuc M-900iA/350 R - 7
ForceApplying ForceApplying 22 Fanuc M-900iB/280 R - 8
ForceApplying ForceApplying 23 Fanuc M-900iB/360 R - 9
ForceApplying ForceApplying 24 Fanuc M-900iB/400L R - 10
ForceApplying ForceApplying 25 Fanuc M-900iB/700 R - 11
ForceApplying ForceApplying 26 Fanuc M-2000iA/900L R - 12
ForceApplying ForceApplying 27 Fanuc M-2000iA/1700L R - 13
ForceApplying ForceApplying 28 Fanuc M-2000iC/210R R - 14
FingerGrasping FingerGrasping 29 FingerGripper E - 1
DrillBitFunction DrillBitFunction 30 Drilling endeffector E - 2
PressToolFunction PressToolFunction 31 PressToolFunction E - 3
ScrewingHeadFunction ScrewingHeadFunction 32 Screwing Endeffector E - 4
Fixturing Fixturing 33 Milling Endeffector E - 5
FingerGrasping FingerGrasping 34 FingerGripper E - 6
DrillBitFunction DrillBitFunction 35 Drilling endeffector E - 7
PressToolFunction PressToolFunction 36 PressToolFunction E - 8
ScrewingHeadFunction ScrewingHeadFunction 37 Screwing Endeffector E - 9
Fixturing Fixturing 38 Milling Endeffector E - 10
FingerGrasping FingerGrasping 39 FingerGripper E - 11
DrillBitFunction DrillBitFunction 40 Drilling endeffector E - 12
PressToolFunction PressToolFunction 41 PressToolFunction E - 13
ScrewingHeadFunction ScrewingHeadFunction 42 Screwing Endeffector E - 14
Fixturing Fixturing 43 Milling Endeffector E - 15
Releasing Releasing 44 FingerGripper E - 1
Press Press 45 PressToolFunction E - 3
SpinningTool SpinningTool 46 Screwing Endeffector E - 4
MillingToolFunction MillingToolFunction 47 Milling Endeffector E - 5
Releasing Releasing 48 FingerGripper E - 6
Press Press 49 PressToolFunction E - 8
SpinningTool SpinningTool 50 Screwing Endeffector E - 9
MillingToolFunction MillingToolFunction 51 Milling Endeffector E - 10
Releasing Releasing 52 FingerGripper E - 11
Press Press 53 PressToolFunction E - 13
SpinningTool SpinningTool 54 Screwing Endeffector E - 14
MillingToolFunction MillingToolFunction 55 Milling Endeffector E - 15
Spinning Spinning 56 Milling Endeffector E - 5
Spinning Spinning 57 Milling Endeffector E - 10
Spinning Spinning 58 Milling Endeffector E - 15
Metrology Metrology 59 Leica AT901-MR M - 1
Metrology Metrology 60 Leica AT960-MR M -2
Metrology Metrology 61 T-Mac Inspect with/without touch trigger probe* M - 3
Metrology Metrology 62 T-Mac Frame M - 4
Metrology Metrology 63 T-Scan5 M - 5
Metrology Metrology 64 Reflectors M - 6
Metrology Metrology 65 T-Probe M - 7
Metrology Metrology 66 Nikon MV331 M - 8
Metrology Metrology 67 V-Stars Dual Camera system (model DynaMo 12) M - 9
Metrology Metrology 68 V-Stars probe M - 10
您好,功能已经实现,如有帮助还请采纳。
import pandas as pd
df = pd.read_csv('data.csv')
# 所有子技能的种类
all_cap = set(df['Capability'].values.tolist())
# 汇总每个子技能,对应的'DeviceID'有哪些
dict1 = {}
for c in all_cap:
dev_sets = df.loc[df['Capability'] == c]['DeviceID'].values.tolist()
dict1[c] = dev_sets
# 1.capabilityA的组合
# 对"Moving"和"ForceApplying":显而易见 "Moving"和"ForceApplying" 共有14种选择,即(R - 1,R - 1) 到(R - 14,R - 14),且必须保持一致
# 然后我们首先考虑"FingerGrasping"和"Releasing",输出的顺序依次是["FingerGrasping", "Releasing","Moving", "ForceApplying"]
cap_A = []
for a in dict1["FingerGrasping"]:
for b in dict1["Releasing"]:
for cd in dict1["Moving"]:
z=[]
z.append(a)
z.append(b)
z.append(cd)
z.append(cd)
cap_A.append(z)
# 2.capabilityB的组合
# 输出的顺序是["FingerGrasping", "Realesing", "Moving"]
cap_B = []
for a in dict1["FingerGrasping"]:
for b in dict1["Releasing"]:
for c in dict1["Moving"]:
z=[]
z.append(a)
z.append(b)
z.append(c)
cap_B.append(z)
# 3.capabilityC的组合
# 输出的顺序是["Fixturing", "MillingToolFunction", "Spinning", "Moving", "ForceApplying"]
cap_C = []
for a in dict1["Fixturing"]:
for b in dict1["MillingToolFunction"]:
for c in dict1["Spinning"]:
for de in dict1["Moving"]:
z=[]
z.append(a)
z.append(b)
z.append(c)
z.append(de)
z.append(de)
cap_C.append(z)
capab = ["capabilityA"] * len(cap_A) + ["capabilityB"] * len(cap_B) + ["capabilityC"] * len(cap_C)
capab_combination = cap_A + cap_B + cap_C
result = pd.DataFrame({"capab": capab,
"capab_combination":capab_combination})
print(result)
result.to_csv("result.csv",index=False)
输出的csv效果如下: