猿问

根据熊猫中的另一个值更改一个值

我试图将我的Stata代码重新编程为Python,以提高速度,而我的方向是PANDAS。但是,我很难集中精力处理数据。


假设我要遍历列标题“ ID”中的所有值。如果该ID与特定数字匹配,那么我想更改两个相应的值FirstName和LastName。


在Stata中,它看起来像这样:


replace FirstName = "Matt" if ID==103

replace LastName =  "Jones" if ID==103

因此,这将替换FirstName中与Matt的ID == 103值相对应的所有值。


在PANDAS中,我正在尝试类似的方法


df = read_csv("test.csv")

for i in df['ID']:

    if i ==103:

          ...

不知道从这里去哪里。有任何想法吗?


蝴蝶不菲
浏览 307回答 3
3回答

Cats萌萌

您可以使用map,它可以映射字典或自定义函数中的值。假设这是您的df:    ID First_Name Last_Name0  103          a         b1  104          c         d创建字典:fnames = {103: "Matt", 104: "Mr"}lnames = {103: "Jones", 104: "X"}和地图:df['First_Name'] = df['ID'].map(fnames)df['Last_Name'] = df['ID'].map(lnames)结果将是:    ID First_Name Last_Name0  103       Matt     Jones1  104         Mr         X或使用自定义函数:names = {103: ("Matt", "Jones"), 104: ("Mr", "X")}df['First_Name'] = df['ID'].map(lambda x: names[x][0])

达令说

这个问题可能仍然经常被探访,因此值得为卡西斯先生的回答提供补充。可以对dict内置类进行子类化,以便为“缺失”键返回默认值。此机制对熊猫有效。但请参见下文。这样就可以避免关键错误。>>> import pandas as pd>>> data = { 'ID': [ 101, 201, 301, 401 ] }>>> df = pd.DataFrame(data)>>> class SurnameMap(dict):...     def __missing__(self, key):...         return ''...     >>> surnamemap = SurnameMap()>>> surnamemap[101] = 'Mohanty'>>> surnamemap[301] = 'Drake'>>> df['Surname'] = df['ID'].apply(lambda x: surnamemap[x])>>> df    ID  Surname0  101  Mohanty1  201         2  301    Drake3  401         可以通过以下方式更简单地完成同一件事。对于getdict对象的方法使用'default'参数,就不必对dict进行子类化。>>> import pandas as pd>>> data = { 'ID': [ 101, 201, 301, 401 ] }>>> df = pd.DataFrame(data)>>> surnamemap = {}>>> surnamemap[101] = 'Mohanty'>>> surnamemap[301] = 'Drake'>>> df['Surname'] = df['ID'].apply(lambda x: surnamemap.get(x, ''))>>> df    ID  Surname0  101  Mohanty1  201         2  301    Drake3  401         
随时随地看视频慕课网APP

相关分类

Python
我要回答