Python 替换熊猫中的NaN值
我有一个数据帧。它的两个栏目是“药品ID”和“假冒重量” 对于“Medicine_ID”的每个值,“假冒重量”列中有NaN或固定值。如何将此NaN值替换为“Medicine_ID”特定值的相应固定值 我的数据片段: train_data.loc[train_data['Medicine_ID']=='IXN93']#用于特定的'Medicine_ID'值Python 替换熊猫中的NaN值,python,python-3.x,pandas,Python,Python 3.x,Pandas,我有一个数据帧。它的两个栏目是“药品ID”和“假冒重量” 对于“Medicine_ID”的每个值,“假冒重量”列中有NaN或固定值。如何将此NaN值替换为“Medicine_ID”特定值的相应固定值 我的数据片段: train_data.loc[train_data['Medicine_ID']=='IXN93']#用于特定的'Medicine_ID'值 如果我的理解正确,您可以使用模式 数据输入 df=pd.DataFrame({'Medicine_ID':["A","B","C","D"
如果我的理解正确,您可以使用
模式
数据输入
df=pd.DataFrame({'Medicine_ID':["A","B","C","D"],'Counterfeit_Weight':[999,2,np.nan,np.nan]})
df1=pd.DataFrame({'Medicine_ID':["A","A","B","B","C","C","C","D","D","D"],'Counterfeit_Weight':[2,np.nan,2,np.nan,2,2,np.nan,1,1,2]})
解决方案
df1=df1.groupby('Medicine_ID')['Counterfeit_Weight'].apply(lambda x : x.mode()[0]).to_frame()
df=df.merge(df1,left_on='Medicine_ID',right_index=True)
df.Counterfeit_Weight_x.fillna(df.Counterfeit_Weight_y,inplace=True)
df.drop('Counterfeit_Weight_y',1).rename(columns={'Counterfeit_Weight_x':'Counterfeit_Weight'})
Out[360]:
Counterfeit_Weight Medicine_ID
0 999.0 A
1 2.0 B
2 2.0 C
3 1.0 D
如果我的理解正确,您可以使用
模式
数据输入
df=pd.DataFrame({'Medicine_ID':["A","B","C","D"],'Counterfeit_Weight':[999,2,np.nan,np.nan]})
df1=pd.DataFrame({'Medicine_ID':["A","A","B","B","C","C","C","D","D","D"],'Counterfeit_Weight':[2,np.nan,2,np.nan,2,2,np.nan,1,1,2]})
解决方案
df1=df1.groupby('Medicine_ID')['Counterfeit_Weight'].apply(lambda x : x.mode()[0]).to_frame()
df=df.merge(df1,left_on='Medicine_ID',right_index=True)
df.Counterfeit_Weight_x.fillna(df.Counterfeit_Weight_y,inplace=True)
df.drop('Counterfeit_Weight_y',1).rename(columns={'Counterfeit_Weight_x':'Counterfeit_Weight'})
Out[360]:
Counterfeit_Weight Medicine_ID
0 999.0 A
1 2.0 B
2 2.0 C
3 1.0 D
对于将
NaN
替换为每组最常见的值Medicine\u ID
可与index
的第一个值一起使用:
对于将
NaN
替换为每组最常见的值Medicine\u ID
可与index
的第一个值一起使用:
您不能将样本数据发布为图片>您不能将样本数据发布为图片>训练数据['Fake_Weight']=(训练数据.groupby('Medicine_ID')['Fake_Weight'].转换(lambda x:x.fillna(x.value_counts().index[0]))正在给我错误索引器错误:索引0超出轴0的范围,大小为0I已使用的列车数据。排序值(['Medicine\u ID','false\u Weight'])。ffill()除非某些组的“Medicine_ID”的值仅在相应的“假冒重量”列中为NaN,否则它工作正常,如果某些
Medicine_ID的值仅为NaN,则可以将其替换为0
?是jezraei。。这就是我在使用排序值时遇到的问题,jezrael。它与我的datatrain_data['Fake_Weight']=(train_data.groupby('Medicine_ID')['Fake_Weight'])完美配合。转换(lambda x:x.fillna(x.value_counts().index[0])给了我错误索引器错误:索引0超出了轴0的范围,轴的大小为0I使用了train_data.sort_值([Medicine_-ID',[facked_-Weight'])。ffill()除非某些组的“Medicine\u ID”的值仅在对应的“假冒重量”列中为NaN,否则它运行良好如果某些Medicine\u ID
的值仅为NaN,则可以用0
替换它?是的,jezraei..这是我使用sort\u Values Hanks很多jezrael时的问题。它与我的数据完美结合