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。我需要找到这两行,然后得到这两行中的最小值,然后进行下一步。谢谢。我将在我的场景中测试这一点。