首页 > 解决方案 > 使用循环更新 Python 数据帧的特定行和列

问题描述

我有一个如下所示的数据集:

df = pd.DataFrame({'Country': ['PL', 'PL', 'PL', 'PL', 'UK', 'UK', 'US', 'US', 'US'],
              'Val1': ['y1', 'b', 'c', 'd', 'y2', 'b', 'y3', 'b', 'c'],
              'Val2': ['x1', 'b', 'c', 'd', 'x2', 'b', 'x3', 'b', 'c']})

Out[34]: 
  Country Val1 Val2
0      PL   y1   x1
1      PL    b    b
2      PL    c    c
3      PL    d    d
4      UK   y2   x2
5      UK    b    b
6      US   y3   x3
7      US    b    b
8      US    c    c

我想要做的是用同一行的 Val1 更新每个 Country 第一行的 Val2。所以,我希望 x1 变成 y1,x2 变成 y2,x3 变成 y3,依此类推。

我尝试过的是以下内容:

countries = df['Country'].unique()
for c in countries:
    df.loc[df['Country'] == c, 'Val2'].iloc[0] = df.loc[df['Country'] == c, 'Val1'].iloc[0]

此循环有效,但不会更新我的数据框。所以我认为我的问题是了解如何为特定的行/列/值更新数据框。

什么是正确的方法?

PS。如果有人能解释为什么我的解决方案不起作用,那就太好了。

标签: pythonpandasdataframe

解决方案


使用.drop_duplicates.loc

df.loc[df.drop_duplicates(subset=['Country'],keep='first').index,'Val2'] = df['Val1']


print(df)

  Country Val1 Val2
0      PL   y1   y1
1      PL    b    b
2      PL    c    c
3      UK   y2   y2
4      UK    b    b
5      UK    c    c
6      US   y3   y3
7      US    b    b
8      US    c    c

推荐阅读