如果某些值是整数范围,而其他值是纯整数,如何将pandas DataFrame分组?

时间:2019-06-10 11:09:39

标签: python pandas pandas-groupby

我想按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”的实例之间不支持“ <”

2 个答案:

答案 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)```