根据位数查找行
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
我正在处理一个包含 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