Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 用条件填充柱_Python_Pandas_Numpy_Dataframe - Fatal编程技术网

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'