如何在Pandas Data Frame中创建条件列,其中列值基于其他列

时间:2019-07-10 20:23:10

标签: python pandas dataframe

我是python的新手,我正在尝试在R DPLYR中进行条件变异。 简而言之,我想在数据框中创建一个名为Result的新列,其中:如果df.['test']大于1 df.['Result']等于该行的相应df.['count'],如果它小于1,那么df.['Result']

df.['count'] *df.['test'] 

我尝试过df['Result']=df['test'].apply(lambda x: df['count'] if x >=1 else ...),不幸的是,这导致了一系列的结果,我也试图编写一些小的函数,这些函数也会返回一系列的结果

我希望最终的Dataframe看起来像这样...

no_ Test Count  Result
1   2    1      1
2   3    5      5
3   4    1      1
4   6    2      2
5   0.5  2      1

3 个答案:

答案 0 :(得分:2)

您可以使用<error> <error_code>100</error_code> <message>Rule not respected (Argument 'reportIds' must not be null)</message> </error>

np.where

输出:

df['Result'] = np.where(df['Test'] > 1, df['Count'], df['Count'] * df['Test'])

答案 1 :(得分:1)

这是一种实现方法:

import pandas as pd
df = pd.DataFrame(columns = ['Test', 'Count'], 
                  data={'Test':[2, 3, 4, 6, 0.5], 'Count':[1, 5, 1, 2, 2]})

df['Result'] = df['Count']
df.loc[df['Test'] < 1, 'Result'] = df['Test'] * df['Count']

输出:

       Test  Count  Result
0   2.0      1     1.0
1   3.0      5     5.0
2   4.0      1     1.0
3   6.0      2     2.0
4   0.5      2     1.0

答案 2 :(得分:0)

您可以通过列表理解来解决这个问题:

df['Result'] = [ df['count'][i] if df['test'][i]>1 else 
                 df['count'][i] * df['test'][i] 
                 for i in range(df.shape[0]) ]