筛选列值在另一列的列表中的行?

教务长

我有一个数据框,其中的一个列具有单个值和一列值列表:

        period  node    key_players
0       0       ZF1013  [ZF1128, ZF176, ZF434, ZF469, ZF659]
1       0       ZF1014  [ZF1128, ZF176, ZF434, ZF469, ZF659]
2       0       ZF1015  [ZF1128, ZF176, ZF434, ZF469, ZF659]
3       0       ZF1020  [ZF1128, ZF176, ZF434, ZF469, ZF659]
4       0       ZF1025  [ZF1128, ZF176, ZF434, ZF469, ZF659]
... ... ... ...
1565    4       ZF898   [ZF1336, ZF1346, ZF3, ZF434, ZF481]
1566    4       ZF945   [ZF1336, ZF1346, ZF3, ZF434, ZF481]
1567    4       ZF948   [ZF1336, ZF1346, ZF3, ZF434, ZF481]
1568    4       ZF97    [ZF1336, ZF1346, ZF3, ZF434, ZF481]
1569    4       ZFM264  [ZF1336, ZF1346, ZF3, ZF434, ZF481]

我想过滤“ key_players”中“节点”的位置。

皮特巴格

我使用了df可见部分的版本(为了以后的功能,请遵循以下步骤:如何提供出色的熊猫示例

我修改了几行以在其中包含节点 key_players

from io import StringIO
df = pd.read_csv(StringIO(
"""
        period  node    key_players
0       0       ZF1013  ['ZF1128', 'ZF176', 'ZF434','ZF469','ZF659']
1       0       ZF1014  ['ZF1014', 'ZF176', 'ZF434','ZF469','ZF659']
2       0       ZF1015  ['ZF1128', 'ZF176', 'ZF434','ZF469','ZF659']
3       0       ZF1020  ['ZF1128', 'ZF176', 'ZF434','ZF469','ZF659']
4       0       ZF1025  ['ZF1128', 'ZF1025', 'ZF434','ZF469','ZF659']
1565    4       ZF898   ['ZF1336', 'ZF1346','ZF3', 'ZF434,' 'ZF481']
1566    4       ZF945   ['ZF1336', 'ZF1346','ZF3', 'ZF434,' 'ZF481']
1567    4       ZF948   ['ZF1336', 'ZF1346','ZF3', 'ZF434,' 'ZF481']
1568    4       ZF97    ['ZF1336', 'ZF1346','ZF3', 'ZF434,' 'ZF481']
1569    4       ZFM264  ['ZF1336', 'ZF1346','ZF3', 'ZF434,' 'ZF481']
"""), sep = '\s\s+')
df['key_players'] = df['key_players'].apply(eval)

解决方案1

我们将列表解压缩到key_playersvia中,explode并保留与之匹配的行node

df2 = df.assign(kp = df['key_players']).explode('kp')
df2[df2['kp'] == df2['node']].drop(columns = 'kp')

此打印

      period  node    key_players
--  --------  ------  -----------------------------------------------
 1         0  ZF1014  ['ZF1014', 'ZF176', 'ZF434', 'ZF469', 'ZF659']
 4         0  ZF1025  ['ZF1128', 'ZF1025', 'ZF434', 'ZF469', 'ZF659']

解决方案2

如果您不介意遍历行(通常不建议使用熊猫),则可以执行此操作

df[df.apply(lambda row: row['node'] in row['key_players'], axis=1)]

具有相同的输出

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

SQL筛选一列中的所有值,但不在另一列中

Pyspark:将一列中的值与另一列中同一行中的列表进行匹配

如果另一列中的值在列表中,则更改一列中的值[R]

根据某一列过滤行,然后检查另一列的值是否在Python的特定列表中

如何检查一列的值是否在另一行的另一列中

Excel根据另一列中的值过滤列表

从值从字典列表的另一列中删除项目

删除一列中的值等于另一列中的值的行

如何根据熊猫中另一列的值组合字符串列表的行?

Python Pandas DataFrame检查一列的值是否在另一列表中

如何从基于年份期间的另一列行中减去一列行的值?

Power Shell将一列的值复制到另一列表中的一列

熊猫遍历行,将列值与列表中的字符串进行比较,从另一列返回值

R:从基于另一列的行中减去值

如果满足条件,则用另一列中的值替换一列中的行

在某一列中求和,以得出另一列中包含相同值的行

根据另一列中的值删除一列中重复的行

Pandas-Lambda-列表中的值以及另一列中的值(列表中的值)

在另一列中查找一列的值

一列或另一列中的值

根据另一列中的一列查找行值并进行计算

將一列中選定行的值除以另一列

从列表的pandas列中,如何删除不在列表的另一列中的所有值?

Python-如果另一列的值在列表中,则熊猫替换列中的值

筛选出重复项,但显示一行中另一列中的非重复行

列中的条件值以更改另一列的同一行中的值

根据另一列中的另一行更改一行的值

与另一列中的值之间

有什么方法可以根据熊猫另一列中的值(列表)更改一列中的值?