python - 根据条件在熊猫中创建新列
问题描述
我有一个这样的列的数据框:
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
解决方案
这是拆分这些字符串并爆炸的一种方法,然后只保留那些在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