根据条件创建新的True/False Pandas数据框架列

1bqhqjot  于 2022-11-27  发布在  其他
关注(0)|答案(1)|浏览(165)

| 年份|地区|几何图形|正确/错误|
| - -|- -|- -|- -|
| 小行星1900|一百零一|多边形((-89.26355 41.32246,-89.26171 41.322),一个正多边形,一个正多边形,一个正多边形...|正确|
| 小行星1902|一百零一|... class ='class 3'多边形((-89.26355 41.33246,-89.26171 41.322)的最大值,并在此基础上计算出该多边形的最大值.|错误|
我有一个包含大量列和行的 Dataframe (上面只是一个示例),我试图创建一个带有条件响应的新列,而不是基于同一行中的值(到目前为止,我读到的所有帖子似乎都只是指基于同一行中另一列中的值创建条件列)。
我想将数据类型为GeometryArray的Geometry列与两年前同一地区的相同geometry列进行比较。
作为疑问句:1902年101区的几何与1900年101区的几何是否相同?正确/错误

df['geometry change from last year'] = np.where(df['geometry'].at[df.index[i]]!= climate[geometry].at[df.index[i-2]], 'True', 'False')
0qx6xfy6

0qx6xfy61#

根据rows的实际组织方式,可以将eqshift一起使用。
(来自here的部分答案)
首先创建虚拟 Dataframe :

import pandas as pd

data = {'Year':[1900,1901,1902],
        'District':[101,101,101],
        'Geometry':[
             'POLYGON ((-89.26355 41.32246, -89.26171 41.322))',
             'POLYGON ((-89.26355 41.33246, -89.26171 41.322))',
             'POLYGON ((-89.26255 41.33246, -89.26171 41.322))'],
        }

df = pd.DataFrame(data)
df

Dataframe 如下所示:

Year  District                                          Geometry
0  1900       101  POLYGON ((-89.26355 41.32246, -89.26171 41.322))
1  1901       101  POLYGON ((-89.26355 41.33246, -89.26171 41.322))
2  1902       101  POLYGON ((-89.26355 41.33246, -89.26171 41.322))

然后,结合上述功能:

df['changed'] = df['Geometry'].eq(df['Geometry'].shift(2).bfill().astype(bool)
df

输出:

Year  District                                          Geometry  changed
0  1900       101  POLYGON ((-89.26355 41.32246, -89.26171 41.322))    False
1  1901       101  POLYGON ((-89.26355 41.33246, -89.26171 41.322))     True
2  1902       101  POLYGON ((-89.26355 41.33246, -89.26171 41.322))     True

不过,由于比较所需的bfill(),您必须查看前两行。

相关问题