假设我有一个如下所示的DataFrame:
A B
xy 9
xc 34
xz 3
我如何处理pandas
,
if df[B] < 90, then df[B] = df[B]*10
会导致以下DataFrame
A B
xy 90
xc 340
xz 30
答案 0 :(得分:1)
在您的具体情况下,您可以执行以下操作:
df.loc[(df.A == "xy") & (df.B<90),"B"] = df.B*10
相当于:
df.loc[(df["A"] == "xy") & (df["B"] <90),"B"] = df.B*10
通常,使用loc定义要更改数据帧的位置,然后分配新值。这是一个一般的例子:
>>> import pandas as pd
>>> df = pd.DataFrame([[1,2],[10,4],[5,4]], columns=["A","B"])
>>> df
A B
0 1 2
1 10 4
2 5 4
>>> df.loc[df.A <5,:]
A B
0 1 2
>>> df.loc[df.A <5,"B"] = df.B*10
>>> df
A B
0 1 20
1 10 4
2 5 4
>>> df
如果条件df.B*10
对任何行有效,则根据您在下面的评论中提出的问题,以及您可以执行的操作,对所有列执行(df["A"] == "xy") & (df["B"] <90)
:
if any((df["A"] == "xy") & (df["B"] <90)):
df.B = df.B*10
答案 1 :(得分:1)
您可以使用
df.loc[(df['A'] == 'xy') & (df['B'] < 90), 'B']*=10
这会给你
A B
0 xy 90
1 xc 34
2 xz 3
这与您想要的输出不匹配,因为您的问题陈述表示如果By的值在xy&lt; 90
如果您希望获得已发布的输出,请使用
df.loc[(df['B'] < 90), 'B']*=10
你得到了
A B
0 xy 90
1 xc 340
2 xz 30
答案 2 :(得分:0)
loc
是一个很好的方法
df.loc[(df.A=='xy')&(df.B<90),'B'] = 10*df.loc[(df.A=='xy')&(df.B<90),'B']
这就是说,基本上,A是xy,选择B列并乘以10。
答案 3 :(得分:0)
或者你可以尝试
df.B=np.where(df.B<90,df.B*10,df.B)
A B
0 xy 90
1 xc 340
2 xz 30
为了你额外的:
df.B*(np.where(df.loc[df.A=='xy','B']<90,10,1))