小编典典

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

all

我试图在 Python 中重现我的 Stata 代码,我被指向了 Pandas 的方向。然而,我很难思考如何处理数据。

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

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

replace FirstName = "Matt" if ID==103
replace LastName =  "Jones" if ID==103

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

在熊猫中,我正在尝试这样的事情

df = read_csv("test.csv")
for i in df['ID']:
    if i ==103:
          ...

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


阅读 111

收藏
2022-08-19

共1个答案

小编典典

一种选择是使用 Python 的切片和索引功能以逻辑方式评估条件所在的位置并覆盖那里的数据。

假设您可以直接将数据加载到pandas其中,pandas.read_csv那么以下代码可能对您有所帮助。

import pandas
df = pandas.read_csv("test.csv")
df.loc[df.ID == 103, 'FirstName'] = "Matt"
df.loc[df.ID == 103, 'LastName'] = "Jones"

如评论中所述,您还可以一次性对两列进行分配:

df.loc[df.ID == 103, ['FirstName', 'LastName']] = 'Matt', 'Jones'

请注意,您需要pandas0.11 或更高版本才能使用loc覆盖分配操作。


另一种方法是使用所谓的链式赋值。这种行为不太稳定,因此它不被认为是最佳解决方案(在文档中明确不鼓励),但了解以下内容很有用:

import pandas
df = pandas.read_csv("test.csv")
df['FirstName'][df.ID == 103] = "Matt"
df['LastName'][df.ID == 103] = "Jones"
2022-08-19