我想按col_2
列对df进行分组,该列主要包含integers
,但是某些单元格包含整数范围。在我的实际示例中,每个唯一整数代表组装零件的特定序列号。数据帧中的每一行代表一个零件,该零件由col_2
分配给装配零件。某些零件只能在给定的不确定性(范围)下分配给组装的零件。
对于每个引用的整数(组装的部件S / N),预期的输出将是一个单个组。例如,应将col_1 = c条目分配给col_2 = 1和col_2 = 2的两个组。
df = pd.DataFrame( {'col_1': ['a', 'b', 'c', 'd', 'e', 'f'],
'col_2': [1, 2, range(1,3), 3,range(2,5),5]})
col_1 col_2
0 a 1
1 b 2
2 c (1, 2)
3 d 3
4 e (2, 3, 4)
5 f 5
print(df.groupby(['col_2']).groups)
上面的代码给出了一个错误:
TypeError:“ range”和“ int”的实例之间不支持“ <”
答案 0 :(得分:1)
我认为这可以满足您的要求
s = df.col_2.apply(pd.Series).set_index(df.col_1).stack().astype(int)
s.reset_index().groupby(0).col_1.apply(list)
第一步为您提供
col_1
a 0 1
b 0 2
c 0 1
1 2
d 0 3
e 0 2
1 3
2 4
f 0 5
最终结果是:
1 [a, c]
2 [b, c, e]
3 [d, e]
4 [e]
5 [f]
答案 1 :(得分:0)
尝试一下:
df = pd.DataFrame( {'col_1': ['a', 'b', 'c', 'd', 'e', 'f'],
'col_2': [1, 2, range(1,3), 3,range(2,5),5]})
col_1 col_2
0 a 1
1 b 2
2 c (1, 2)
3 d 3
4 e (2, 3, 4)
5 f 5
df['col_2'] = df.col_2.map(lambda x: range(x) if type(x) != range else x)
print(df.groupby(['col_2']).groups)```