【问题标题】:Is there any way add a columns with specific condition?有没有办法添加具有特定条件的列?
【发布时间】:2021-06-24 23:18:21
【问题描述】:

有一个数据框。 检查以下条件后,我想添加列“e”。

  1. 如果“c”的组件在“a”列中且“d”的组件在同一行的“b”列中,则 e 的组件正常 其他“”
import pandas as pd
import numpy as np
A = {'a':[0,2,1,4], 'b':[4,5,1,7],'c':['1','2','3','6'], 'd':['1','4','2','9']} 
df = pd.DataFrame(A) 

我想要得到的结果是

A = {'a':[0,2,1,4], 'b':[4,5,1,7],'c':['1','2','3','6'], 'd':['1','4','2','9'], 'e':['OK','','','']} 

【问题讨论】:

  • component of 'c' is in column 'a' 是什么意思?

标签: python pandas dataframe


【解决方案1】:

您可以在左侧的['a', 'b'] 和右侧的['c', 'd'] 上将df 与自身合并。如果索引在合并中“存活”,那么e 应该是OK

df['e'] = np.where(
    df.index.isin(df.merge(df, left_on=['a', 'b'], right_on=['c', 'd']).index),
    'OK', '')

df

输出:

   a  b  c  d   e
0  0  4  1  1  OK
1  2  5  2  4    
2  1  1  3  2    
3  4  7  6  9    

附:在合并之前,我们需要将ab列转换为str类型(或者cd转换为数字),这样我们就可以比较ca,以及@987654335 @和b

df[['a', 'b']] = df[['a', 'b']].astype(str)

【讨论】:

  • 感谢您的帮助。但是,当我将此代码应用于有点复杂的 csv 文件时。我面临如下警告消息“您正在合并 int 和 float 列,其中 float 值不等于它们的 int 表示......”
  • @GihyunYi 是的,所以ab 的类型必须分别与cd 的类型相同。在您的情况下,您似乎有要合并的 intfloat 列,因此您可以尝试在合并之前将整数列转换为 float(使用 .astype(float)
猜你喜欢
  • 2023-03-24
  • 1970-01-01
  • 2011-11-22
  • 1970-01-01
  • 1970-01-01
  • 2020-08-05
  • 2021-03-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多