循环遍历熊猫中的行[重复]

Posted

技术标签:

【中文标题】循环遍历熊猫中的行[重复]【英文标题】: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

【问题讨论】:

你这里没有循环 查看这个帖子***.com/questions/16476924/… 你想打印吗,因为你可以不用for循环吗? 【参考方案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 - ***.com/questions/54432583/…

以上是关于循环遍历熊猫中的行[重复]的主要内容,如果未能解决你的问题,请参考以下文章

根据某个(非零)值删除数据帧(熊猫)中的行[重复]

熊猫选择没有重复的行[重复]

熊猫遍历行以查看值是不是为字母数字[重复]

熊猫只删除连续重复的行,忽略特定的列

删除熊猫数据框中具有特定值的行[重复]

将包含列表的列拆分为熊猫中的不同行[重复]