我正在将一列添加到数据框中,其中的列值是通过比较数据框中的两个 other 列来确定的。添加该列的代码是:
lst = []
for x in range(len(df)):
if df['ColumnA'][x] > df['ColumnB'][x]:
lst.append(df['ColumnB'][x])
else:
lst.append(df['ColumnA'][x])
df['ColumnC'] = lst
我的问题是,有没有更有效/ Python的方法来做到这一点?过去曾建议我要警惕每次遍历数据帧的每一行,因此想看看我是否丢失了某些东西。谢谢!
答案 0 :(得分:6)
是的,请尽量减少:
df['ColumnC'] = df[['ColumnA', 'ColumnB']].min(1)
答案 1 :(得分:2)
使用numpy.where
df['ColumnC'] = np.where(df['ColumnA'] > df['ColumnB'], df['ColumnB'], df['ColumnA'])
答案 2 :(得分:0)
比其他解决方案多一些的代码,但可以说更具通用性
mask = df[ColumnA] > df[ColumnB]
df[ColumnC] = pd.Series(index=df.index)
df[ColumnC].loc[mask] = df[ColumnA].loc[mask]
df[ColumnC].loc[~mask] = df[ColumnB].loc[~mask]