Присвоение числовых значений строковым значениям во вложенном списке в столбце Pandas DF с помощью np.where - PullRequest
0 голосов
/ 03 августа 2020

У меня есть список элементов под названием flat_list , который выглядит следующим образом:

['Agile Software Development',
 'Scrum',
 'DevOps',
 'Serverless Architecture',
 'Kubernetes',
 'Linux',
 'Windows',
 'Eclipse',
 'PagerDuty',
 'Apache2',
 'Docker',
 'AWS EC2',
 'Amazon Web Services (AWS)',
 'Sysdig',
 'Apache Kafka',
 'AWS Lambda',
 'Azure',
 'OpenStack',
 'AWS S3',
 'MongoDB',
 'Cassandra',
 'MySQL',
 'PostgreSQL',
...]

Я взял уникальные элементы из этого списка и присвоил им номер в фрейм данных под названием unique_skills_df , который выглядит так:

dummy   skills
0   Load Balancers
1   Combinatorics
2   Cheetah
3   *nix
4   MapKit API
...     ...     ...
6973    Multimedia Processing
6974    SwiftGen
6975    WordPress Multisite
6976    Web SQL
6977    Bootstrap 3

Я хочу сопоставить каждое числовое значение, соответствующее его навыку, в unique_skills_df кадре данных, обратно в исходный вложенный список навыков (который был сведен в flat_list ), чтобы повторно присоединить к исходному фрейму данных, talentpool . навыки выглядит так:

[dict_values([['Agile Software Development', 'Scrum', 'DevOps', 'Serverless Architecture'], ['Kubernetes', 'Linux', 'Windows', 'Eclipse', 'PagerDuty', 'Apache2', 'Docker', 'AWS EC2', 'Amazon Web Services (AWS)', 'Sysdig', 'Apache Kafka', 'AWS Lambda', 'Azure', 'OpenStack'], ['AWS S3', 'MongoDB', 'Cassandra', 'MySQL', 'PostgreSQL', 'AWS DynamoDB', 'Spring Data MongoDB', 'AWS RDS', 'MySQL/MariaDB', 'Datadog', 'Memcached'], ['Java', 'PHP', 'SQL', 'Bash', 'Perl', 'JavaScript', 'Python', 'C#', 'Go'], ['Ruby on Rails (RoR)', 'AWS HA', '.NET', 'Serverless Framework', 'Selenium', 'CodeIgniter', 'Express.js'], ['Cisco', 'Content Delivery Networks (CDN)', 'Kubernetes Operations (Kops)', 'Prometheus', 'VMware ESXi', 'Bash Scripting', 'Scrum Master', 'Infrastructure as Code', 'Performance Tuning', 'Serverless', 'System Administration', 'Linux System Administration', 'Code Review'], ['Node.js', 'Jenkins Pipeline', 'jQuery', 'React', 'Selenium Grid'], ['Jenkins', 'Bitbucket', 'GitHub', 'AWS ECS', 'AWS IAM', 'Amazon CloudFront CDN', 'Terraform', 'AWS CloudFormation', 'Git Flow', 'Artifactory', 'Nginx', 'Grafana', 'Zabbix', 'Docker Compose', 'AWS CLI', 'AWS ECR', 'Chef', 'Jira', 'Git', 'Postfix', 'MongoDB Shell', 'Wowza', 'Amazon SQS', 'AWS SES', 'Subversion (SVN)', 'TeamCity', 'Microsoft Visual Studio', 'Google Kubernetes Engine (GKE)', 'VMware ESX', 'Fluentd', 'Sumo Logic', 'Slack', 'Apache ZooKeeper', 'AWS Fargate', 'Ansible', 'ELK (Elastic Stack)', 'Microsoft Team Foundation Server', 'Azure Kubernetes Service (AKS)']]),

 dict_values([['Debian Linux', 'Windows', 'Linux', 'NetBeans'], ['MySQL', 'Morphia', 'MongoDB', 'Oracle SQL', 'PostgreSQL', 'IBM DB2'], ['HTML5', 'CSS', 'Java', 'JavaScript', 'C++', 'Less', 'XPath', 'PHP', 'R', 'XSLT', 'XUL'], ['GWT', 'JUnit', 'Hibernate', 'AngularJS', 'JavaServer Pages (JSP)', 'Spring', 'JNI', 'Selenium', 'ASP.NET', 'Apache Velocity'], ['Ajax', 'COM'], ['HTML5 Canvas', 'Digester', 'JAXB', 'Java Servlets', 'Node.js', 'Jackson', 'JDBC', 'Standard Template Library (STL)', 'FFTW', 'ODBC', 'OpenGL', 'XStream'], ['Subversion (SVN)', 'Apache Ant', 'Mime4J', 'YourKit', 'IntelliJ IDEA', 'Apache Tomcat', 'Git', 'GCC', 'Cygwin', 'Maven', 'Eclipse IDE', 'UJAC', 'Flash', 'Mathematica', 'Perforce', 'CVS', 'GDB', 'Grunt', 'JDeveloper']]),

Вы можете видеть, что приведенное выше представляет две строки исходного фрейма данных, talentpool .

Пока , Я просто сначала попытался сопоставить каждое числовое значение обратно в плоский список. Вот что я пробовал:

for sublist in skills:
    dummy_skills = np.where(
        (unique_skills_df.skills.isin(sublist)), unique_skills_df.index, 0
    )

Но это вернуло 0 для всех элементов, что означает, что unique_skills_df.skills не встречается нигде в подсписке. Я также пробовал это:

for sublist in skills:
    for item in sublist:
        dummy_skills = np.where(
        (unique_skills_df.skills.isin(sublist)), unique_skills_df.index, 0)

Но это также вернуло 0 для всех элементов. Другие вещи, которые я пробовал, были настолько медленными, что это не совсем подходящие решения. Как бы мне решить эту проблему?

Спасибо!

Спасибо за вашу помощь!

...