【问题标题】:I want to split a DataFrame into 2 df's using lambda on a column我想在列上使用 lambda 将 DataFrame 拆分为 2 个 df
【发布时间】:2021-04-10 22:16:57
【问题描述】:

我得到了以下熊猫数据框:

Value1 Value2 Food
-2 2 Apple
5 -5 Orange
-4 3 Peach
-2 6 Pineapple

我现在正尝试根据“Value1”值将行拆分为 2 个数据框。所以结果看起来像这样:

负值1:

Value1 Value2 Food
-2 2 Apple
-4 3 Peach
-2 6 Pineapple

负值2:

Value1 Value2 Food
5 -5 Orange

到目前为止,我已经使用了结合 if 语句的 for 循环:

for i in range(len(data)):
        if data['Value1'].iloc[i] < 0:
            NegativeValue1 = NegativeValue1.append(data.iloc[i])
        else:
            NegativeValue2 = NegativeValue2.append(data.iloc[i])

,效果很好,但对于大型 df 来说太耗时了。

因此,我想构建一个 lambda 函数来执行此操作,但我对 lambda 没有太多经验。

到目前为止我的尝试都没有成功:

NegativeValue1 = NegativeValue1.apply(lambda data:  if data['Value1']  < 0, axis = 1)

谁能帮忙?

【问题讨论】:

    标签: pandas sorting if-statement lambda


    【解决方案1】:

    您可以使用布尔索引:

    mask = df["Value1"] < 0
    
    print(df[mask])
    print("-" * 80)
    print(df[~mask])
    

    打印:

       Value1  Value2       Food
    0      -2       2      Apple
    2      -4       3      Peach
    3      -2       6  Pineapple
    --------------------------------------------------------------------------------
       Value1  Value2    Food
    1       5      -5  Orange
    

    【讨论】:

      【解决方案2】:

      你可以使用boolean indexing(比apply更简单更快):

      NegativeValue1 = data[data.Value1 < 0]
      
      #    Value1  Value2       Food
      # 0      -2       2      Apple
      # 2      -4       3      Peach
      # 3      -2       6  Pineapple
      
      NegativeValue2 = data[data.Value2 < 0]
      
      #    Value1  Value2       Food
      # 1       5      -5     Orange
      

      【讨论】:

        猜你喜欢
        • 2020-08-16
        • 1970-01-01
        • 2019-04-05
        • 1970-01-01
        • 2021-06-19
        • 2017-03-31
        • 2022-01-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多