我知道这已经被问了几次了,但我似乎不能让它工作。当与特定值相等时,我想跨行将值复制到单独的列中。使用下面的df
,当np.nan
位于Member
中时,我希望通过np.nan
复制到Group
。
import pandas as pd
import numpy as np
df = pd.DataFrame({
'Member' : ['C1','C2','C3','C4','C5',np.nan,np.nan],
'Min' : [5,5,5,5,5,5,5],
'Max' : [10,10,10,10,10,10,10],
'Group' : [26,26,26,26,26,26,26],
})
# Attempt 1
df['Group'] = np.where(df['Member'] == np.nan, df['Group'], df['Member'])
# Attempt 2
df['Group'] = df.apply(lambda x: x['Member'] if x['Group'] == np.nan else x['Group'], axis=1)
这两种尝试都不起作用。预期输出为:
Member Min Max Group
0 C1 5 10 26
1 C2 5 10 26
2 C3 5 10 26
3 C4 5 10 26
4 C5 5 10 26
5 NaN 5 10 Nan
6 NaN 5 10 Nan
发布于 2019-10-10 06:06:01
通过使用特殊函数的代码解决方案,该函数用于测试Series.isna
的缺失值,并将Member
与np.where
中的Group
列进行交换
df['Group'] = np.where(df['Member'].isna(), df['Member'], df['Group'])
#alternative with notna
#df['Group'] = np.where(df['Member'].notna(), df['Group'], df['Member'])
#alternative with loc
#df.loc[df['Member'].isna(), 'Group'] = df['Member']
print (df)
Member Min Max Group
0 C1 5 10 26
1 C2 5 10 26
2 C3 5 10 26
3 C4 5 10 26
4 C5 5 10 26
5 NaN 5 10 NaN
6 NaN 5 10 NaN
https://stackoverflow.com/questions/58316374
复制相似问题