Python 需要根据单元格值更新数据帧行。此外,如果两行具有相同的单元格值,则只需更新第一行 情景1

Python 需要根据单元格值更新数据帧行。此外,如果两行具有相同的单元格值,则只需更新第一行 情景1,python,pandas,numpy,Python,Pandas,Numpy,数据帧如下所示: AAA BBB 0 A 100 1 B 100 2 C 100 3 D 100 AAA BBB 0 A 100 1 B 100 2 C 100 3 B 100 设置AAA='Z'和BBB=200,其中AAA='C' 情景2 数据帧如下所示: AAA BBB 0 A 100 1 B 100 2 C 100 3 D 100

数据帧如下所示:

   AAA   BBB
0    A   100
1    B   100
2    C   100
3    D   100
   AAA   BBB
0    A   100
1    B   100
2    C   100
3    B   100
设置AAA='Z'和BBB=200,其中AAA='C'

情景2 数据帧如下所示:

   AAA   BBB
0    A   100
1    B   100
2    C   100
3    D   100
   AAA   BBB
0    A   100
1    B   100
2    C   100
3    B   100
设置AAA='Z'和BBB=200,其中AAA='B',但仅当索引=1时?因此,基本上只有在多行满足“where”标准的情况下才在第一行中

我的尝试 我尝试过类似的方法,它适用于场景1,但我不知道如何执行场景2

df.iloc[ np.where( df_positions.AAA == 'C')[0]] = 'Z'
就你而言

cond=(df.index==1)&df.AAA.eq('B')
df.loc[cond]=['Z',200]
df
  AAA  BBB
0   A  100
1   Z  200
2   C  100
3   B  100
您可以使用从匹配项获取第一行索引

df.loc[df.AAA.eq('B').idxmax()][Z',200]
df
AAA BBB
0 A 100
1 Z 200
2 C 100
3B100
如果每次都要替换相同的值(
['Z',200]
),则可以同时执行这两种方案

df.loc[[df.AAA.eq(x).idxmax()代表['C','B']]]]=['Z',200]
df
AAA BBB
0 A 100
1 Z 200
2Z200
3B100

谢谢。但我想有一件事我不清楚。数据帧不是常数。我可以在任意两行中使用相同的AAA值。所以我不能硬编码index=1。我需要找到这两行,然后得到这两行中的最小值,然后进行下一步。谢谢。我将在我的场景中测试这一点。