Python 添加带有条件的新列
我需要通过添加更多列来管理数据帧。 我的数据头示例是Python 添加带有条件的新列,python,pandas,dataframe,Python,Pandas,Dataframe,我需要通过添加更多列来管理数据帧。 我的数据头示例是 `Date` `Sentence` 28 Jan who.c 30 Jan house.a 02 Feb eurolet.it 我需要添加另一列,Tp,为每个链接分配一个值: 如果句子以a结尾,则分配公寓;如果以b结尾,则指定bungalow,依此类推,如original所示 如果句子以UK结尾,则指定UK;如果它以it结尾,则分配Italy,依此类推。值来自国家/地区。 我希望这样: 日期句 1月2
`Date` `Sentence`
28 Jan who.c
30 Jan house.a
02 Feb eurolet.it
我需要添加另一列,Tp
,为每个链接分配一个值:
- 如果句子以
结尾,则分配a
;如果以公寓
结尾,则指定b
,依此类推,如bungalow
所示李>original
- 如果句子以
结尾,则指定UK
;如果它以UK
结尾,则分配it
,依此类推。值来自Italy
。 我希望这样: 日期句 1月28日who.c教堂 1月30日,一间公寓 2月2日eurolet.it。意大利国家/地区
conditions = [df['Sentence'].str.endswith(original), df['Sentence'].str.endswith(country)]
choices = [original, country]
# df['Tp'] = df.apply(lambda row: urlparse(row['Sentence']).netloc, axis = 1)
df['Tp'] = np.select(conditions, choices, default ='Unknown')
print(df)
在哪里
original= [('a', 'apartment'), ('b', 'bungalow'), ('c', 'church')]
及
country
包含50多个元素
你能告诉我怎么修吗?该列应添加到数据框中,然后添加到csv文件中
谢谢
更新:
Sentences \
0
1 who.c
2 citta.me.it
3 office.of
4 eurolet.eu
.. ...
995 uilpa.ie
996 fog.de
Original and country are from
list_country=np.array(country).tolist()
list_country_name=np.array(country_name).tolist()
flat_name_country = [item for sublist in list_country for item in sublist]
flat_country_name = [item for sublist in list_country_name for item in sublist]
zip_domains=list(zip(flat_name_country, flat_country_name))
您能将您的
原件
和国家/地区
转换成dict吗
original= [('a', 'apartment'), ('b', 'bungalow'), ('c', 'church')]
original = {x:y for x,y in original}
country = [('UK', 'United Kingdom'), ('IT', 'Italy'), ('DE', 'Germany'), ('H', 'Holland'), ..., ('F', 'France'), ('S', 'Spain')]
country = {x:y for x,y in country}
现在,您可以执行与以下相同的任务:
df['Tp'] = df['Sentence'].apply(lambda sen : original.get( sen[-1], country.get(sen[-1], 'unknown') ) )
在代码中,您需要使
条件
中的元素长度与选项
中的元素长度相同(扩展为原始和国家)首先,让我们从元组中创建一些字典并将它们组合起来
country = {k.lower() : v for (k,v) in country}
og = {k : v for (k,v) in original}
country.update(og)
print(country)
{'uk': 'United Kingdom',
'it': 'Italy',
'de': 'Germany',
'h': 'Holland',
'f': 'France',
's': 'Spain',
'a': 'apartment',
'b': 'bungalow',
'c': 'church'}
然后让我们拆分并获得max元素-这允许忽略文本中的任何句号,只查看最后一个元素。最后,我们使用.map
关联您的值
df['value'] = df["Sentence"].str.split(".", expand=True).stack().reset_index(1).query(
"level_1 == level_1.max()"
)[0].map(country)
print(df)
Date Sentence value
0 28 Jan who.c church
1 30 Jan house.a apartment
2 02 Feb eurolet.it Italy
谢谢你,斯潘丹。不幸的是,在应用到数据集后,我遇到了以下错误:
索引器错误:字符串索引超出范围
。否则我只能得到未知值。您能否显示错误的更多详细信息?哪一行和哪一个错误?请在您的帖子中添加一些示例输入数据。我添加了一些示例输入。但是我认为它已经可以复制了。我不明白为什么只为此而给我的问题打分。看分数回答问题的人可能对回答分数低的问题不感兴趣。问问题的人会寻求帮助。你的问题根本不可重复,因为你没有提供任何样本数据,所以我投了反对票。好的重复答案可以很快得到高质量的答案。你能确认句子的最后一项前面总是有句号吗?是的,我能确认。我也只是添加了预期的输出。我会对句子的结尾感兴趣,从句号到结尾(例如,对于house.a
我会看.a
;对于street.euv
在.eur
等等)。然后,我需要联想到“公寓”、“欧洲”等词。。但是它仍然返回未知值和NaN值。@math.world您需要精确匹配-如果它返回NaN
,则它没有匹配项。
df['value'] = df["Sentence"].str.split(".", expand=True).stack().reset_index(1).query(
"level_1 == level_1.max()"
)[0].map(country)
print(df)
Date Sentence value
0 28 Jan who.c church
1 30 Jan house.a apartment
2 02 Feb eurolet.it Italy