根据位数查找行

Find rows based on number of digits

我正在处理一个包含 2000 行的数据框,但为此我创建了这个简单的数据框,我想在其中找到 col2 列中包含 3 个或更少数字的所有行。这是数据框:

d = {'col1': [10000, 2000,300,4000,50000], 'col2': [10, 20000, 300, 4000, 100]}
df = pd.DataFrame(data=d)

    col1    col2
0   10000   10
1   2000    20000
2   300     300
3   4000    4000
4   50000   100

Area     int64
Price    int64
dtype: object

之后,我想创建一个新列 col3,其中来自那些过滤行(具有 3 个或更少数字)的 col2 列的值将乘以它们来自 col1 列的值,而其他行保留一样。

这是预期的输出:

    col1    col2    col3
0   10000   10      100000
1   2000    20000   20000
2   300     300     90000
3   4000    4000    4000
4   5000    100     500000

col1    int64
col2    int64
col3    int64
dtype: object

提前致谢!

np.where的简单应用:

df['col3'] = np.where(df.col2 < 1000, df.col2 * df.col1, df.col2)

    col1   col2      col3
0  10000     10    100000
1   2000  20000     20000
2    300    300     90000
3   4000   4000      4000
4   5000    100    500000

使用np.where创建条件,因为这些是数字,我们可以检查column2值是否小于1000

cond = (df['col2'] < 1000)
choice = (df['col1'] * df['col2'])

df['col3'] = np.where(cond, choice, df['col2'])
df
    col1    col2    col3
0   10000   10  100000
1   2000    20000   20000
2   300 300 90000
3   4000    4000    4000
4   50000   500 25000000

你可以试试Series.mask

df['col4'] = df['col2'].mask(df['col2'] < 1000, df['col2'] * df['col1'])
print(df)

    col1   col2    col3    col4
0  10000     10  100000  100000
1   2000  20000   20000   20000
2    300    300   90000   90000
3   4000   4000    4000    4000
4   5000    100  500000  500000

普通 pandas 代码使用 df.apply

def custom_fill(cols):
    if cols[1] < 1000:
        return cols[0] * cols[1]
    else:
        return cols[1]

df['col3'] = df[['col1','col2']].apply(custom_fill, axis=1)

输出:

    col1   col2     col3
0  10000     10   100000
1   2000  20000    20000
2    300    300    90000
3   4000   4000     4000
4  50000    100  5000000