我有一个数据框,它看起来像这样:
edges
id node_id ...
0 'AX' ['A', 'B']
1 'BX' ['B', 'C']
2 'CX' ['C', 'C']
'id'
列有字符串元素,'node_id'
列有列表(里面有字符串)。我想从这个 Pandas 中删除一些元素
df
, 如果他们的 'node_id' 有 2 个相同的字符串。在上面的数据框中,这将是自
'node_id'
以来的第二个元素有 'C'
和 'C'
.为此,我正在使用以下内容:
edges[edges['node_id'].apply(lambda x: x[0]) != edges['node_id'].apply(lambda x: x[1])]
但是,由于 .apply()
时间效率不高,我正在寻找内置的 Pandas 功能。有什么可以实现我所做的吗?
最佳答案
尝试这个:
df = pd.DataFrame({
'id': ['AX', 'BX', 'CX'],
'node_id': [['A','B'],['B', 'C'],['C', 'C']]})
mask = df['node_id'].apply(lambda x : x[0]!=x[1])
df = df[mask]
输出: id node_id
0 AX [A, B]
1 BX [B, C]
如果您在 list
中有多个项目你可以试试这个:df = pd.DataFrame({
'id': ['AX', 'BX', 'CX'],
'node_id': [['A', 'B', 'C'],['B', 'C', 'C'],['C', 'C', 'C']]})
mask = df['node_id'].apply(lambda x : len(x)==len(set(x)))
df = df[mask]
输出:id node_id
0 AX [A, B, C]
关于python - 过滤 Pandas 列中的列表元素是否相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69162411/