为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

蝴蝶不菲 2019-12-17 14:36:35
我试图将我的Stata代码重新编程为Python,以提高速度,而我的方向是PANDAS。但是,我很难集中精力处理数据。假设我要遍历列标题“ ID”中的所有值。如果该ID与特定数字匹配,那么我想更改两个相应的值FirstName和LastName。在Stata中,它看起来像这样:replace FirstName = "Matt" if ID==103replace LastName =  "Jones" if ID==103因此,这将替换FirstName中与Matt的ID == 103值相对应的所有值。在PANDAS中,我正在尝试类似的方法df = read_csv("test.csv")for i in df['ID']:    if i ==103:          ...不知道从这里去哪里。有任何想法吗?
查看完整描述

3 回答

?
Cats萌萌

TA贡献1805条经验 获得超9个赞

您可以使用map,它可以映射字典或自定义函数中的值。


假设这是您的df:


    ID First_Name Last_Name

0  103          a         b

1  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_Name

0  103       Matt     Jones

1  104         Mr         X

或使用自定义函数:


names = {103: ("Matt", "Jones"), 104: ("Mr", "X")}

df['First_Name'] = df['ID'].map(lambda x: names[x][0])


查看完整回答
反对 回复 2019-12-17
?
达令说

TA贡献1821条经验 获得超6个赞

这个问题可能仍然经常被探访,因此值得为卡西斯先生的回答提供补充。可以对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  Surname

0  101  Mohanty

1  201         

2  301    Drake

3  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  Surname

0  101  Mohanty

1  201         

2  301    Drake

3  401         


查看完整回答
反对 回复 2019-12-17
  • 3 回答
  • 0 关注
  • 306 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信