Python 用条件填充柱
我有一个包含两列的数据框:Python 用条件填充柱,python,pandas,numpy,dataframe,Python,Pandas,Numpy,Dataframe,我有一个包含两列的数据框: Col1 Col2 1 NaN Someval1 2 Y Someval2 3 N Someval3 4 NaN NaN 5 NaN Someval4 我想向NaN提供以下条件: If Col1 has NaN and Col2 has a Some
Col1 Col2
1 NaN Someval1
2 Y Someval2
3 N Someval3
4 NaN NaN
5 NaN Someval4
我想向NaN提供以下条件:
If Col1 has NaN and Col2 has a Someval1 that is in list 1 then fillna with Y
If Col1 has NaN and Col2 has a Someval4 that is in list 2 then fillna with N
If Col1 has NaN and Col2 has a NaN that is in list 2 then fillna with N
有什么建议吗?(不知道是否可能)
非常感谢 我认为您需要以下条件和条件:
另一个解决方案包括:
另一种解决方案具有一个条件和
fillna
:
L1 = ['Someval1','Someval8']
L2 = ['Someval4','Someval9', np.nan]
df['Col1'] = df['Col1'].mask(df['Col2'].isin(L1), df['Col1'].fillna('Y'))
df['Col1'] = df['Col1'].mask(df['Col2'].isin(L2), df['Col1'].fillna('N'))
print (df)
Col1 Col2
1 Y Someval1
2 Y Someval2
3 N Someval3
4 N NaN
5 N Someval4
这是解决办法
完整脚本:
df = pd.read_csv(StringIO("""Col1 Col2
1 NaN Someval1
2 Y Someval2
3 N Someval3
4 NaN NaN
5 NaN Someval4
"""), sep="\s+")
df.loc[df.Col1.isnull() & df.Col2.isin(['Someval1']), 'Col1'] = 'Y'
df.loc[df.Col1.isnull() & df.Col2.isin(['Someval4']), 'Col1'] = 'N'
df.loc[df.Col1.isnull() & df.Col2.isin([np.nan]), :] = 'N'
df
Col1 Col2
1 Y Someval1
2 Y Someval2
3 N Someval3
4 N N
5 N Someval4
你可以用
df.Col1[(df['Col1'].isnull())&(df['Col2']=='Someval1')] = 'Y'
df.Col1[(df['Col1'].isnull())&(df['Col2']=='Someval4')] = 'N'
df.Col1[(df['Col1'].isnull())&(df['Col2'].isnull())] = 'N'
列表1中的NaN?:)清单2,感谢验证,我将编辑第5行的第二行“Someval4”;第二行和第三行不支持第四行和第五行中的fillna到Col1rows@tworec我认为
列表2
指的是列2
,我将对其进行更改。
df.loc[df.Col1.isnull() & df.Col2.isin(['Someval1']), 'Col1'] = 'Y'
df.loc[df.Col1.isnull() & df.Col2.isin(['Someval4']), 'Col1'] = 'N'
df.loc[df.Col1.isnull() & df.Col2.isin([np.nan]), :] = 'N'
df = pd.read_csv(StringIO("""Col1 Col2
1 NaN Someval1
2 Y Someval2
3 N Someval3
4 NaN NaN
5 NaN Someval4
"""), sep="\s+")
df.loc[df.Col1.isnull() & df.Col2.isin(['Someval1']), 'Col1'] = 'Y'
df.loc[df.Col1.isnull() & df.Col2.isin(['Someval4']), 'Col1'] = 'N'
df.loc[df.Col1.isnull() & df.Col2.isin([np.nan]), :] = 'N'
df
Col1 Col2
1 Y Someval1
2 Y Someval2
3 N Someval3
4 N N
5 N Someval4
df.Col1[(df['Col1'].isnull())&(df['Col2']=='Someval1')] = 'Y'
df.Col1[(df['Col1'].isnull())&(df['Col2']=='Someval4')] = 'N'
df.Col1[(df['Col1'].isnull())&(df['Col2'].isnull())] = 'N'