在Python中有条件地设置DataFrame中的特定单元格(索引、‘Column’)值

jslywgbw  于 2022-09-21  发布在  Python
关注(0)|答案(2)|浏览(136)

我需要有条件地设置 Dataframe 中特定列的每一行的值。如果满足条件,则应根据列表中提供的变量更改特定单元格,否则应保持原样。请找到下面的脚本。当前脚本设置所有值。

非常感谢

import pandas as pd
df = pd.DataFrame({'Name': ['A', 'B', 'C', 'D'],
                    'Functions': [1000, 2000, 3000, 5000],
                    'value': [5, 6, 7, 8],
                    'Shape': ['Round', 'Round', 'Round', 'Round']})

x1 = 500
x2 = 700
x3 = 800
x4 = 900
x = [x1, x2, x3]

for index,row in df.iterrows():
    if row['Functions'] <= 2200:
        df.at[0, 'Functions']=x1
        df.at[1, 'Functions']=x2
        df.at[2, 'Functions']=x3
        df.at[3, 'Functions']=x4
bkhjykvo

bkhjykvo1#

如果列表具有相同长度,如DataFrame中的行数,则可以使用筛选列表和集合的值来简化解决方案:

m = df['Functions'] <= 2200
df.loc[m, 'Functions']= np.array([x1, x2, x3, x4])[m]

print (df)
  Name  Functions  value  Shape
0    A        500      5  Round
1    B        700      6  Round
2    C       3000      7  Round
3    D       5000      8  Round

但如果需要按指数设置值,请使用:

m = df['Functions'] <= 2200
df.at[(df.index == 0) & m, 'Functions']=x1
df.at[(df.index == 1) & m, 'Functions']=x2
df.at[(df.index == 2) & m, 'Functions']=x3
df.at[(df.index == 3) & m, 'Functions']=x4

print (df)
  Name  Functions  value  Shape
0    A        500      5  Round
1    B        700      6  Round
2    C       3000      7  Round
3    D       5000      8  Round
ippsafx7

ippsafx72#

也许您可以使用numpy.where()``np.where(df['Functions']<=2200, x, df['Functions'])

相关问题