首页 > 解决方案 > 根据条件在熊猫中创建新列

问题描述

我有一个这样的列的数据框:

    column_1
0   0.75 / 1 / 1.25 
1   0.25 / 0 / -0.25 / 0
2   0 / -0.25 / 0 / -0.25 / 0
3   0 / -0.25 
4   0.5 / 0.25
5   0.25

每行由连续数字链组成(数字之间移动 0.25,例如从 0 到 0.25 到 0.5,或从 -1 到 -1.25)我只需要相同数字不出现 2 次(或更多)的行),例如:0.25 / 0 / 0.25 / 0 / 0.25 / 0 或 0.5 / 0.25 / 0.5 我不需要只有一个数字的行,例如 0.25

我想创建新列,并保留那些满足这个条件的人(相同的数字不会出现2次(或更多))

    column_1                     new_column
0   0.75 / 1 / 1.25              0.75 / 1 / 1.25 
1   0.25 / 0 / -0.25 / 0         NaN
2   0 / -0.25 / 0 / -0.25 / 0    NaN
3   0 / -0.25                    0 / -0.25 
4   0.5 / 0.25                   0.5 / 0.25
5   0.25                         NaN

标签: pythonpandas

解决方案


这是拆分这些字符串并爆炸的一种方法,然后只保留那些在Series.is_unique原处True并且​​它们具有多个元素的方法:

l = df.column_1.str.split(' / ')
m = (l.explode()
      .groupby(level=0, sort=False)
      .apply(lambda x: x.is_unique) 
       & (l.str.len()>1))
df['new_column'] = df.where(m)

print(df)

                    column_1        new_column
0           0.75 / 1 / 1.25   0.75 / 1 / 1.25 
1       0.25 / 0 / -0.25 / 0               NaN
2  0 / -0.25 / 0 / -0.25 / 0               NaN
3                 0 / -0.25         0 / -0.25 
4                 0.5 / 0.25        0.5 / 0.25
5                       0.25               NaN

推荐阅读