python - 使用 iterrows 更改行下面的所有值

标签 python pandas dataframe contains

我正在研究代表美国地区并包含州的 df。各州旁边有[编辑]。 2 个州之间的所有区域都属于上述州。我认为这应该可行,但由于某种原因它并没有改变 df 的值......知道这里发生了什么吗?你会怎么做?

这是 df

0                      Alabama[edit]
1                            Auburn 
2                          Florence 
3                      Jacksonville 
4                        Livingston 
5                        Montevallo 
6                              Troy 
7                        Tuscaloosa 
8                          Tuskegee 
9                       Alaska[edit]
10                        Fairbanks 
11                     Arizona[edit]
12                        Flagstaff 
13                            Tempe 
14                           Tucson 
15                    Arkansas[edit]
16                      Arkadelphia 
17                           Conway 
18                     Fayetteville 
19                        Jonesboro 
20                         Magnolia 
21                       Monticello 
22                     Russellville 
23                           Searcy 
24                  California[edit]
25                           Angwin 
26                           Arcata 
27                         Berkeley 
28                            Chico 
29                        Claremont 

这是我的解决方案,不改变 df:

df['state'] = 'replace this'
edit = '\[edit\]'
for index, row in df.iterrows():
    if edit in row['RegionName']:
        st = df.loc[index, ['RegionName']]
        df.loc[index, ['RegionName']] = None
        df.iloc[index:, 1] = st

最佳答案

假设您的列名称是 regions,您可以使用 str.extract:

df.assign(
    state=df.region.str.extract(r'(.*?)\[edit\]').ffill()
).mask(df.region.str.endswith('[edit]')).dropna()

          region       state
1         Auburn     Alabama
2       Florence     Alabama
3   Jacksonville     Alabama
4     Livingston     Alabama
5     Montevallo     Alabama
6           Troy     Alabama
7     Tuscaloosa     Alabama
8       Tuskegee     Alabama
10     Fairbanks      Alaska
12     Flagstaff     Arizona
13         Tempe     Arizona
14        Tucson     Arizona
16   Arkadelphia    Arkansas
17        Conway    Arkansas
18  Fayetteville    Arkansas
19     Jonesboro    Arkansas
20      Magnolia    Arkansas
21    Monticello    Arkansas
22  Russellville    Arkansas
23        Searcy    Arkansas
25        Angwin  California
26        Arcata  California
27      Berkeley  California
28         Chico  California
29     Claremont  California

如果您想保留您所在地区列中的州,只需删除掩码即可:

df.assign(
    state=df.region.str.extract(r'(.*?)\[edit\]').ffill()
)

关于python - 使用 iterrows 更改行下面的所有值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51913626/

相关文章:

python - wxPython列表Ctrl : Add Column and Images

python - 如何在 python 中迭代具有字符串值的整数

python - 使用 Geopandas 计算到最近要素的距离

Python - 使用 Panda 将多个表添加到单个 CSV 中

python-3.x - 将函数应用于 Pandas 数据框并添加新列?

scala - Spark 数据框到箭头

r - 更改矩阵/数据框中的行顺序

python - 如何在 Python 的基类中创建派生类的对象?

pandas - 运行时错误 : Unsupported type in conversion to Arrow: VectorUDT

python - 无服务器 - Numpy - 无法找到好的绑定(bind)路径格式