python-3.x - 在 Pandas 数据框单元格中查找唯一值
问题描述
样本 DF
data = {'name': ['Jason , Jason', 'Molly', 'Tina', 'Jake', 'Amy'],
'year': ['2012 , 2012 , 2016 , 2016', 2012, 2013, 2014, 2014],
'reports': ['4 , 4 , 5 , 6 , 6 , 7', 24, 31, 2, 3]}
df1 = pd.DataFrame(data, index = ['Cochice', 'Pima', 'Santa Cruz', 'Maricopa', 'Yuma'])
看起来像:
name ... year
Cochice Jason , Jason ... 2012 , 2012 , 2016 , 2016
Pima Molly ... 2012
Santa Cruz Tina ... 2013
Maricopa Jake ... 2014
Yuma Amy ... 2014
我希望Cochice
索引的每个单元格都有唯一值。我试过了drop_duplicates
,nunique
但他们都没有工作。
在我原来的 df 中,列数可以超过 3
输出 Df
name reports year
Cochice Jason 4,5,6,7 2012,2016
Pima Molly 24 2012
Santa Cruz Tina 31 2013
Maricopa Jake 2 2014
Yuma Amy 3 2014
解决方案
我不知道有任何内置的 Pandas 函数可以做到这一点,所以我想出了一个解决方案applymap
,它使用一个自定义函数来拆分逗号,去除空格,并将独特的元素重新组合成一个字符串。它并不漂亮,而且可能效率不高,但它应该可以工作:
In [15]: df1.applymap(lambda x: x if ',' not in str(x) else ','.join(sorted(set(y.strip() for y in(x.split(','))))))
Out[15]:
name reports year
Cochice Jason 4,5,6,7 2012,2016
Pima Molly 24 2012
Santa Cruz Tina 31 2013
Maricopa Jake 2 2014
Yuma Amy 3 2014
编辑以显示仅应用于某个索引而不是所有行:
df1.loc[['Cochice']].applymap(lambda x: x if ',' not in str(x) else ','.join(sorted(set(y.strip() for y in(x.split(','))))))
Out[24]:
name reports year
Cochice Jason 4,5,6,7 2012,2016
推荐阅读
- python - 修改条件python参数中的变量
- sql - SQL While 循环插入另一个表中的值
- assembly - 我正在尝试在 BCD 中添加两个数字。如何使用进位逐位添加两个十六进制值?
- tinymce - tinyMCE base64 Image and storing to mySQL database
- typescript - Testing Connection to Firebase Real-Time Database, Hitting a ref to Confirm Connection
- unity3d - Unity - following finger only works for one direction
- python - TypeError:在方法“...”中,使用 swig 模块时类型为“unsigned char const *”的参数 1
- android - html progress bar not working in android browsers
- android - fitsSystemWindows is not working with support libraries 27.1.1
- java - Java | Posing Boolean expressions on hashMap entries