python - 过滤 Pandas 列中的列表元素是否相同

标签 python pandas dataframe filter apply

我有一个数据框,它看起来像这样:

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/

相关文章:

python - 如何将一列从另一个数据帧连接到特定列?

python - 根据字典中的键对在数据框中创建不同的列

Python Telegram 机器人太慢?

python - 使用 mod_wsgi 时如何写入 apache 日志文件

python - pandas to_timedelta 忽略单位参数?

python - 如何使用 pandas melt 获取值及其错误

python - 在 Pandas 数据框中选择连续和非连续的多列

python - 无法导入Python librosa.display

python - 字符串日期至今( Pandas )

r - 基于R中的日期列创建具有重复值的新数据框