0
列[= x、t、y、z]のデータがあり、列[y、z]をアウトソースデータ。pandas、列yのz値を設定します。xはアウトソースデータでの条件x:
次のコードは、列yの塗りつぶしに適しています。
# data I want to fill
df=pd.DataFrame([['x1','t','NaN','Nan'],['x2','t','NaN','Nan'],
['x2','t','NaN','Nan'],['x3','t','NaN','Nan'],
['x3','t','NaN','Nan'],['x4','t','NaN','Nan'],
['x5','t','NaN','Nan']],
columns=list(['x','t','y','z']))
# source data
source=pd.DataFrame([['x1','y1','z1'],['x2','y2','z2'],['x3','y3','z3'],
['x4','y4','z4']],columns=list(['x','y','z']))
print('df before\n',df)
def applyFunc(x):
for i in range(0,len(source)):
if x==source.at[i,'x']:
return source.at[i,'y']
else:
return 1
df['y']=df['x'].apply(applyFunc)
print('\n\ndf after:\n',df)
、実行結果は以下の通りである:私がしたいことは、一度列[Y、Z]を充填さ
df before
x t y z
0 x1 t NaN Nan
1 x2 t NaN Nan
2 x2 t NaN Nan
3 x3 t NaN Nan
4 x3 t NaN Nan
5 x4 t NaN Nan
6 x5 t NaN Nan
df after:
x t y z
0 x1 t y1 Nan
1 x2 t y2 Nan
2 x2 t y2 Nan
3 x3 t y3 Nan
4 x3 t y3 Nan
5 x4 t y4 Nan
6 x5 t 1 Nan
。 結果このようにしたいです。
df after:
x t y z
0 x1 t y1 z1
1 x2 t y2 z2
2 x2 t y2 z2
3 x3 t y3 z3
4 x3 t y3 z3
5 x4 t y4 z4
6 x5 t 1 1
私が試してみましたが、私は結果はこのようなものですしながら、it.Iは、次のコード
def applyFunc(x):
for i in range(0,len(source)):
if x==source.at[i,'x']:
return (source.at[i,'y'],source.at[i,'z'])
else:
return (1,1)
df['y','z']=df['x'].apply(applyFunc)
を試してみました取得する方法を見つけることがあります。
df after:
x t y z (y, z)
0 x1 t NaN Nan (y1, z1)
1 x2 t NaN Nan (y2, z2)
2 x2 t NaN Nan (y2, z2)
3 x3 t NaN Nan (y3, z3)
4 x3 t NaN Nan (y3, z3)
5 x4 t NaN Nan (y4, z4)
6 x5 t NaN Nan (1, 1)
applyFuncには「else:」は必要ありません。 'for 1'と同じレベルでインデントされた' return 1'も簡単に動作し、よりきれいです。 – wkzhu