如何根据pandas中给定的条件更改特定行中的值?

2024-09-28 18:53:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我想这样做:

for row in df:
if row['Country'] == 'unknown':
    row['Country'] = city2country_mapping[row['city']]

国家和城市是列。在

“city2country_mapping”是一个字典,其中键:值对是“城市”:“乡村”。在

(基本上,我试图用字典中的country来填充未知的内容,因为我知道每一行的城市)


Tags: incitydfforif字典国家country
3条回答

您可以使用^{}对其进行矢量化:

df['country'] = df.country.where(
    df.country != 'unknown', df.city.map(city2country_mapping))

df.city.map(city2country_mapping)将首先为每个城市创建一个包含相应国家的序列,然后使用该序列替换country列中的unknown国家。在

编辑特定行:DataFrame.locSeries.where

编辑DataFrame对象的特定行(“切片”)的标准选项是^{}。在

接受的答案使用了一个简洁的应用程序^{}重写df.Country系列,对于这个特定的任务来说,这个系列更加简洁。在

重新编码值:.apply.map

您可以使用.map()直接用字典重新编码序列—不需要.apply()lambda函数。在

示例

# Example data
df = pd.DataFrame({'Country': ['unknown', 'USA', 'unknown', 'UK', 'USA', 'unknown'],
                   'City': ['London', 'New York', 'New York', 'London', 'New York', 'Paris']
                  })
city2country_mapping = {'London': 'UK', 'New York': 'USA', 'Paris': 'France'}

# print(df)

#    Country      City
# 0  unknown    London
# 1      USA  New York
# 2  unknown  New York
# 3       UK    London
# 4      USA  New York
# 5  unknown     Paris

df.loc[df.Country == 'unknown', 'Country'] = df[df.Country == 'unknown'].City.map(city2country_mapping)
print(df)

输出:

^{pr2}$

您可以使用apply来执行此操作:

df['Country'] = df.apply(lambda row: city2country_mapping[row['city']] 
                                     if row['Country'] == 'unknown' else row['Country'], axis=1)

如果是“未知”国家,Lambda将从映射中返回city,否则只返回此行中的一个国家。在

相关问题 更多 >