繁体   English   中英

如果熊猫数据框列中存在列表值列表,请用另一个熊猫列中的值替换它们

[英]If list of lists values are present in Pandas dataframe column replace them with values from another Pandas column

我有一个列表列表,其中包含以下类型的单词tockens:

[['java_developer'],
['ETL', 'database_administrator'],
...
['web-developer', 'c#', 'ms_sql']]

我也有一个键值熊猫数据框,其中第一列键和第二列是值。 例如:

     Key                      Value
0    java_developer           java
1    web-developer            web
2    database_administrator   database
3    ETL                      ETL
4    ms_sql                   database
... ... ...
100  c#                       c#

我想收到以下类型的列表:

[['java'],
['ETL', 'database'],
...
['web', 'c#', 'database']]

如何实施?

使用getDataFrame缺失值添加一些值,例如None

#added val to last sublist for better sample
L = [['java_developer'],
['ETL', 'database_administrator'],
['web-developer', 'c#', 'ms_sql', 'val']]

#create dictionary from DataFrame
d = df.set_index('Key')['Value'].to_dict()
print (d)
{'java_developer': 'java', 'web-developer': 'web', 
 'database_administrator': 'database', 'ETL': 'ETL', 
 'ms_sql': 'database', 'c#': 'c#'}

#in nested list comprehension repalce by dict
L1 = [[d.get(y, None) for y in x] for x in L]
print (L1)
[['java'], ['ETL', 'database'], ['web', 'c#', 'database', None]]

或删除不匹配的值添加过滤:

L1 = [[d.get(y) for y in x if y in d] for x in L]
print (L1)
[['java'], ['ETL', 'database'], ['web', 'c#', 'database']]

如果字典中不存在相同的值:

L1 = [[d.get(y, y) for y in x] for x in L]
print (L1)
[['java'], ['ETL', 'database'], ['web', 'c#', 'database', 'val']]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM