【问题标题】:loop over rows in pandas [duplicate]循环遍历熊猫中的行[重复]
【发布时间】:2021-12-18 15:20:50
【问题描述】:

我正在使用 python,在 python 中循环遍历行时遇到了一些困难。 我的数据框包含 3 列:id、val1、大小。 我想根据大小创建列 col1。 我尝试这段代码,但我的代码永远不在第一个条件之内。请问我应该如何改正。假设我不会与其他方法一起工作,我只是想解决我自己的代码。

友好,

数据示例

data = [['x1', 100, 1], ['x2', 200, 2], ['x3', 300, 1]]
df = pd.DataFrame(data, columns = ['id', 'val1', 'size'])

代码

if (df['size'] == 2) is True:
  df['col1'] = df['val1']
  print("1")
else:
  pass

【问题讨论】:

标签: python pandas


【解决方案1】:

你想要print吗?您可以在没有循环的情况下执行此操作,如下所示:

df['col1'] = np.where(df['size'] == 2, df['val1'], np.nan)

输出:

>>> df
    id  val1    size    col1
0   x1  100     1   NaN
1   x2  200     2   200.0
2   x3  300     1   NaN

【讨论】:

    【解决方案2】:
    df['col1'] = df.loc[df['size'] == 2, 'val1']
    print(df)
    
       id  val1  size   col1
    0  x1   100     1    NaN
    1  x2   200     2  200.0
    2  x3   300     1    NaN
    

    【讨论】:

      【解决方案3】:

      如果你像这样编辑你的代码,你可以制作 col1:

      data = [['x1', 100, 1], ['x2', 200, 2], ['x3', 300, 1]]
      df = pd.DataFrame(data, columns=['id', 'val1', 'size'])
      
      col1 = []
      for i, row in df.iterrows():
          if row['size'] == 2:
              col1.append(row['val1'])
          else:
              col1.append(None)
      df['col1'] = pd.Series(col1)
      
      print(df)
      

      另一种方式是:

      def func(df):
          if df['size'] == 2:
              return df['val1']
          else:
              return None
      
      df['col1'] = df.apply(func, axis=1)
      print(df)
      

      这将打印:

         id  val1  size   col1
      0  x1   100     1    NaN
      1  x2   200     2  200.0
      2  x3   300     1    NaN
      

      【讨论】:

      • 我看到你做了一个循环。这是我在没有循环 def funt1(df): if (df['size'] == 2 ): val = 'Valu1' else: val= 'Valu2' return val df[' col1'] = df.apply(funt1, axis=1)
      • 你现在知道为什么在这种情况下我可以做到并且第一种情况没有迭代吗?谢谢@Sangkeun Park
      • @tamo007 你可以这样做,但它应该使代码像这样。我添加了另一种方式,因为你想让它工作
      • @SangkeunPark - 永远不要在这里使用apply - stackoverflow.com/questions/54432583/…
      猜你喜欢
      • 1970-01-01
      • 2014-09-08
      • 1970-01-01
      • 2019-01-15
      • 2020-11-20
      • 2020-03-06
      • 2017-06-08
      • 2017-01-15
      相关资源
      最近更新 更多