python - 通过比较行 pandas 创建一个新列
问题描述
我的数据框看起来像这样
df = pd.Dataframe({ 'a': ["10001", "10001", "10002", "10002" , "10002"], 'b': ['hello', 'hello', 'hola', 'hello', 'hola']})
我想创建一个具有以下条件的布尔值的新列“c”:
- 如果 'a' 的值相同(即第 1 行和第 2 行,第 3 和第 4 和第 5 行),检查这些行的 'b' 值是否相同。(第 2 行返回 True。第 4 行返回 False)。
- 如果“a”的值不同,请跳过。
我当前的代码如下:
def check_consistency(col1,col2):
df['match'] = df[col1].eq(df[col1].shift())
t = []
for i in df['match']:
if i == True:
t.append(df[col2].eq(df[col2].shift()))
check_consistency('a','b')
它返回错误。
解决方案
Abitwise &
应该做:检查两个条件是否都满足:
df['c'] = (df.a == df.a.shift()) & (df.b == df.b.shift())
df.c
#0 False
#1 True
#2 False
#3 False
#4 False
#Name: c, dtype: bool
或者,如果你想让你当前的代码工作,你可以做类似的事情(基本上做与上面相同的检查):
def check_consistency(col1,col2):
df['match'] = df[col1].eq(df[col1].shift())
for i in range(len(df['match'])):
if (df['match'][i] == True):
df.loc[i,'match'] = (df.loc[i, col2] == df.loc[i-1, col2])
check_consistency('a','b')
推荐阅读
- python - 从 scrapy 下载的图像小于预期 (jpegs) 或不可读 (tifs)
- mapping - 预期的主要表达(Solidity)
- php - 将 XML 发送到 Soap Web 服务 php
- swift - 如何在swift 4中向后播放m4a的音频(不创建新文件)
- linux - aws cli、crontab 和用户权限之间的交互
- c - 使用函数返回的指针给出特殊字符(在 C 中)
- php - php 字符串在 (-) 字符上爆炸
- ios - 可以应用于每个 UITextField 的自定义类 - Swift
- c# - 缺少插件库 OSGEO ogr_OCI.dll
- java - Solr 索引的复合词