pandas 如何迭代DataFrame列中的重复值?

9nvpjoqh  于 2023-06-20  发布在  其他
关注(0)|答案(1)|浏览(98)

我有一个迭代重复值的问题。问题是分组在这里不是一个选项,因为我应该分析的列是一个字符串,这将是简单的二义性。
让我举例说明:
| 代码|长度|价值|
| - -----|- -----|- -----|
| 111ab|联系我们|'800毫米'|
| 111ab| 'len2'| 31,0英寸|
| 222cd|联系我们|'1.500毫米'|
| 222cd| 'len2'| 59年,零英寸|
我这样做的原因是我想在一段代码中比较这些值。考虑到length列是一个字符串,我想以某种方式创建一个额外的二进制列,当为len 1写入'800 mm'时,它的值为0,而为len 2写入'31.0 in'时,它的值为0。这里不能解析字符串并重新计算value,因为mm或in的一些值被认为是四舍五入的或以某种方式假定的。这意味着我想检查800毫米的相同代码是否有31英寸,1500毫米是否有59英寸。
长话短说:我想检查一下800毫米是否为每个代码31英寸。只是举个例子。
我该怎么做?
先谢谢你了

n7taea2i

n7taea2i1#

在给定约束的情况下,您似乎希望匹配一对精确的值。
如何使用set操作?

df['flag'] = (df.groupby('code')['value']
                .transform(lambda x: 0 if set(x) == set(['800 mm', '31,0 in'])
                                     else np.nan)
             )

或者,用字典:

mapper = {frozenset(['800 mm', '31,0 in']): 0}

df['flag'] = (df.groupby('code')['value']
                .transform(lambda x: mapper.get(frozenset(x)))
             )

输出:

code lenght     value  flag
0  111ab   len1    800 mm   0.0
1  111ab   len2   31,0 in   0.0
2  222cd   len1  1.500 mm   NaN
3  222cd   len2   59,0 in   NaN

相关问题