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