我是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
答案 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]) ]