如何遍历DataFrame并构建一个新的(有条件的)框架?

时间:2019-09-26 13:10:41

标签: python-3.x pandas function loops dataframe

所以我为我的问题创建了一个DataFrame:


import pandas as pd
import random
median = random.uniform(0, 1)
data = [[random.uniform(0, 1), random.uniform(0, 1)], [random.uniform(0, 1), random.uniform(0, 1)], [random.uniform(0, 1), random.uniform(0, 1)]]
df= pd.DataFrame(data, columns=["A","B"])

DataFrame看起来像这样:

          A         B         
0  0.243965  0.363859
1  0.376634  0.968781 
2  0.113388  0.555450

我想做的是查看A列第0行中的值是否大于先前定义的中位数。如果是这种情况,我想在B列第0行中应用某个公式,然后将结果保存到新的DataFrame中。如果不是这种情况,我想将B列第0行中的值应用于其他公式,并将其保存在新的DataFrame中。我想对每一行重复一次。

假设中位数等于0.3 使它变得简单的两个公式是:

x -0.1和X + 0.1

我试图这样解决:

for column in df[["A"]]:
    if A > median:
        new_Dataframe = B - 0.1
    else:
        new_Dataframe = B + 0.1

结果应如下所示,并且应该是一个新的DataFrame:

   new_DataFrame         
0  0.463859
1  0.868781 
2  0.655450

我在访问所需的单元格时遇到问题,也不知道如何解决此问题。任何帮助表示赞赏。另外,实际的DataFrame具有更多的行,因此我不能像示例中那样对每一行进行计算。

1 个答案:

答案 0 :(得分:0)

使用np.where

new_dataframe=pd.DataFrame(np.where(df['A']>median,df['B']-0.1,df['B']+0.1),columns=['new_dataframe'])
print(new_dataframe)

   new_dataframe
0       0.463859
1       0.868781
2       0.655450