根据熊猫df中其他列的值有条件地填充列

用户名

这个问题类似于关于有条件地填充列的几个问题,但是我df有点复杂。

我有一个df包含浮点数和字符串with列。我试图有条件地填充包含基于字符串的浮点数的列。

基于df以下内容:

如果中的值以Code开头A,则我希望保持原样。

如果该值Code以开头B,则我希望保留相同的初始值,然后返回nan's到以下各行,直到中的下一个值Code

如果中的值以Code开头C,我要保持相同的第一个值,直到下一个浮动['Numx','Numy]

import pandas as pd
import numpy as np


d = ({                          
      'Code' :['A1','A1','','B1','B1','A2','A2','','B2','B2','','A3','A3','A3','','B1','','B4','B4','A2','A2','A1','A1','','B4','B4','C1','C1','','','D1','','B2'],
      'Numx' : [30.2,30.5,30.6,35.6,40.2,45.5,46.1,48.1,48.5,42.2,'',30.5,30.6,35.6,40.2,45.5,'',48.1,48.5,42.2, 40.1,48.5,42.2,'',48.5,42.2,43.1,44.1,'','','','',45.1],
      'Numy' : [1.9,2.3,2.5,2.2,2.5,3.1,3.4,3.6,3.7,5.4,'',2.3,2.5,2.2,2.5,3.1,'',3.6,3.7,5.4,6.5,8.5,2.2,'',8.5,2.2,2.3,2.5,'','','','',3.2]
      })

df = pd.DataFrame(data = d)

输出:

   Code  Numx Numy
0    A1  30.2  1.9
1    A1  30.5  2.3
2        30.6  2.5
3    B1  35.6  2.2
4    B1  40.2  2.5
5    A2  45.5  3.1
6    A2  46.1  3.4
7        48.1  3.6
8    B2  48.5  3.7
9    B2  42.2  5.4
10        nan  nan       
11   A3  30.5  2.3
12   A3  30.6  2.5
13   A3  35.6  2.2
14       40.2  2.5
15   B1  45.5  3.1
16        nan  nan     
17   B4  48.1  3.6
18   B4  48.5  3.7
19   A2  42.2  5.4
20   A2  40.1  6.5
21   A1  48.5  8.5
22   A1  42.2  2.2
23        nan  nan      
24   B4  48.5  8.5
25   B4  42.2  2.2
26   C1  43.1  2.3
27   C1  44.1  2.5
28        nan  nan      
29        nan  nan   
30   D1   nan  nan      
31        nan  nan        
32   B2  45.1  3.2

当值Code时,我在想这样的事情B

df['Numx'] = np.where(df['Code'] == 'B-'.ffill()) 
df['Numy'] = np.where(df['Code'] == 'B-'.ffill())

所以我想要的输出将是:

   Code  Numx Numy
0    A1  30.2  1.9
1    A1  30.5  2.3
2        30.6  2.5
3    B1  35.6  2.2
4    B1   nan  nan
5    A2  45.5  3.1
6    A2  46.1  3.4
7        48.1  3.6
8    B2  48.5  3.7
9    B2   nan  nan
10        nan  nan        
11   A3  30.5  2.3
12   A3  30.6  2.5
13   A3  35.6  2.2
14       40.2  2.5
15   B1  45.5  3.1
16        nan  nan         
17   B4  48.1  3.6
18   B4   nan  nan
19   A2  42.2  5.4
20   A2  40.1  6.5
21   A1  48.5  8.5
22   A1  42.2  2.2
23        nan  nan      
24   B4  48.5  8.5
25   B4   nan  nan
26   C1  43.1  2.3
27   C1  43.1  2.3
28       43.1  2.3   
29       43.1  2.3   
30   D1  43.1  2.3   
31       43.1  2.3         
32   B2  45.1  3.2
耶斯列尔

我相信需要:

df['Code_new'] = df['Code'].where(df['Code'].isin(['AA','BB'])).ffill()

df[['Numx','Numy']] = df[['Numx','Numy']].mask(df['Code_new'].duplicated())
mask = df['Code_new'] == 'BB'
df.loc[mask, ['Numx','Numy']] = df.loc[mask, ['Numx','Numy']].ffill()
print (df)
  Code  Numx Numy Code_new
0   AA  30.2  1.9       AA
1        NaN  NaN       AA
2        NaN  NaN       AA
3   BB  35.6  2.2       BB
4       35.6  2.2       BB
5       35.6  2.2       BB
6       35.6  2.2       BB
7   CC  35.6  2.2       BB
8       35.6  2.2       BB
9   DD  35.6  2.2       BB

要么:

df = df.replace('nan', np.nan)

df['Code_new'] = df['Code'].where(df['Code'].isin(['AA','BB'])).ffill()

m1 = df['Code_new'].duplicated() & (df['Code_new'] == 'AA')
df[['Numx','Numy']] = df[['Numx','Numy']].mask(m1)
m2 = df['Code_new'] == 'BB'
df.loc[m2, ['Numx','Numy']] = df.loc[m2, ['Numx','Numy']].ffill()
print (df)
  Code  Numx  Numy Code_new
0   AA  30.2   1.9       AA
1        NaN   NaN       AA
2        NaN   NaN       AA
3   BB  35.6   2.2       BB
4       40.2   2.5       BB
5       45.5   3.1       BB
6       45.5   3.1       BB
7   CC  45.5   3.1       BB
8       45.5   3.1       BB
9   DD  42.2   5.4       BB

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

熊猫:根据其他列的值有条件地替换值

Python:根据其他两列中的值有条件地创建新列

Excel公式-如何使用其他表格中的值有条件地填充列

在熊猫df中有条件地填充列

有条件地按其他列值填充列

根据其他列值创建新列-有条件向前填充?

如何根据 julia 中的其他列值有条件地在数据框中创建新列

有条件地用其他数据框中的值替换熊猫中的列值

根据其他列的值有条件地更改系列的值

Excel:根据其他列中的值有条件地选择单元格范围

根据所有列的值有条件地删除熊猫中的行

如何在熊猫中有条件地填充列中的空值

如何基于其他两个列有条件地制作新的熊猫DF列

有条件地用不同df的值填充pandas df的列

有条件地连接数据框的行,并根据条件处理其他列

根据其他列和行有条件地计算一列中不同数量的项目

如何根据R中其他列中的数据有条件地执行减法?

在 Pandas 中有条件地用其他值替换列值

根据其他具有条件的列值创建新列

在其他列上有条件地从 hive 表中获取最新的列值

如何使用另一列中的值有条件地更改DF值

根据pandas DataFrame中的列值有条件地替换多个列

有条件地替换数据框(熊猫)中选定列中的所有值

根据列中的最大值有条件地删除Excel中的重复项

pandas - 有条件地用其他行值填充空行值

使用其他列中的某些值创建列-有条件的

根据R中一列中的连续值有条件地插入行

根据列中的重复值有条件地复制数据

有条件地替换列中的值