熊猫DataFrame如果这那么循环

时间:2018-08-08 17:26:28

标签: python pandas numpy dataframe

我对编写和修改一个数据框的项目非常陌生。

现在,我有一个包含几列的数据帧,其中一个名为Check的列的值为TrueFalse。此值是根据代码中的公式给出的

我要实现的是另一列名为Price的列将加1,直到Check列为True

我尝试了以下几行代码,但均无济于事。

df['Price'] = df['Price'].apply(lambda x: +1 if x == False)

i = df['Check']
while i == False:
    df = df['Price'] =+ 1

df['PRICE'] = df.ix[df.Check.isin(False), 'PRICE'] = +1

我希望有人能帮助我

1 个答案:

答案 0 :(得分:1)

首先,一个示例数据框:

import pandas as pd

data = {'check': [True, True, False], 'price': [3, 2, 0]}
df = pd.DataFrame(data)
df

示例数据框为:

    check   price
0   True    3
1   True    2
2   False   0

使用方法DataFrame.loc,可以选择我们要更改的数据。根据布尔数组df['check'] == True选择行,并使用名称price选择列。

df.loc[df['check'] == True, 'price']

给出所选行的索引和价格值:

0   3
1   2

然后,可以将check为true的行中的价格增加:

df.loc[df['check'] == True, 'price'] += 1
df

现在df是:

    check   price
0   True    4
1   True    3
2   False   0

通过将此行插入循环,价格将连续增加。但是,需要在某些时候将check的值切换为false。

请注意,== True是多余的:df.loc[df['check'], 'price'] += 1也可以工作

带有while循环的示例:

while not df['check'].all():   # loop while at least one check value is false
    print(df, '\n')
    df.loc[df['check'], 'price'] += 1  # increment the 'checked' price py one
    df.loc[df['check'] == False, 'check'] = True   # Switch the false to true, <- insert your formula