例如,我有以下Dataframe(称为items):
| index | itemID | maintopic | subtopics |
|:----- |:------:|:---------:| ------------------:|
| 1 | 235 | FBR | [FZ, 1RH, FL] |
| 2 | 1787 | NaN | [1RH, YRS, FZ, FL] |
| 3 | 2454 | NaN | [FZX, 1RH, FZL] |
| 4 | 3165 | NaN | [YHS] |
我想用以字母开头的子主题列表的第一个元素来填充maintopic列中的nan值。有人有主意吗(问题1)
我试过了,但没成功´t工作:
import pandas as pd
import string
alphabet = list(string.ascii_lowercase)
items['maintopic'] = items['maintopic'].apply(lambda x : items['maintopic'].fillna(items['subtopics'][x][0]) if items['subtopics'][x][0].lower().startswith(tuple(alphabet)) else x)
高级(问题2):更好的办法是看一下副标题列表中的所有元素,如果有更多的元素有第一个字母,甚至是第一个和第二个字母的共同点,那么我就看这个。例如,在第2行中有fz和fl,所以我想用f填充此行的主主题。第三行有fzx和fzl,我想用fz来填充主主题。但如果这太复杂了,那么我也很乐意回答第一个问题。
谢谢你的帮助!
3条答案
按热度按时间6jygbczu1#
尝试:
印刷品:
epggiuax2#
试着回答第一个问题:
输出:
您可以更改fill\ u value函数以返回所需的值来填充值。现在,我已经返回了以字母表开头的子主题的第一个值。
kmpatx3s3#
可以这样做:获取列表中每个值中以第一个字母开头的所有子字符串
subtopics
列并构建一个计数器,然后根据其频率对计数器中的项进行排序。如果项目的频率相同,请考虑最长的字符串。输出: