Python 基于其他行替换空值
我有一个包含许多列的数据框架(但这里只发布col1、col2、col3以简化发布): 我想用id中的Python 基于其他行替换空值,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个包含许多列的数据框架(但这里只发布col1、col2、col3以简化发布): 我想用id中的值填充源id的none值。 例如,source\u id a5行没有必须替换为id a1值,随后,source\u id a6行没有必须替换为a5行 输出: id col1 col2 col3 source_id a1 765.3 234 cat a5 a2 3298.3 none dog a4 a3 876
值填充源id的none值。
例如,source\u id a5行没有
必须替换为id a1值
,随后,source\u id a6行没有
必须替换为a5行
输出:
id col1 col2 col3 source_id
a1 765.3 234 cat a5
a2 3298.3 none dog a4
a3 8762.1 27 rat a8
a4 3298.3 none dog none
a5 765.3 234 cat a6
a6 765.3 234 cat none
首先,似乎none
是字符串,所以将它们替换为缺少的值:
df = df.mask(df.eq('none'), None)
然后在networkx
中使用以下命令创建字典:
按映射的id
列最后一组,并用正向和反向填充替换None
s:
df1 = (df.groupby(df['id'].map(node2id))
.apply(lambda x: x.ffill().bfill())
.assign(source_id = df['source_id']))
print (df1)
id col1 col2 col3 source_id
0 a1 765.3 234 cat a5
1 a2 3298.3 None dog a4
2 a3 8762.1 27 rat a8
3 a4 3298.3 None dog None
4 a5 765.3 234 cat a6
5 a6 765.3 234 cat None
首先要做的是将id列设置为索引,以便查找该行以填充单元格
df = df.set_index('id')
然后,您可以在列上循环并填充它们
对于df.列中的列:
如果col=='source\u id':
持续
对于df.index中的idx:
dst_idx=df.source_id[idx]
如果(df[col][idx]!=“无”
和dst_idx!=“无”
和df.index中的dst_idx和
df[col][dst_idx]=“无”):
df[col][dst_idx]=df[col][idx]
col1 col2 col3源代码
身份证件
a1 765.3 234 a5类
a2 3298.3无狗a4
a3 8762.1 27大鼠a8
a4 3298.3无狗无
A5765.3 234 a6类
a6 765.3 234无类
df1 = (df.groupby(df['id'].map(node2id))
.apply(lambda x: x.ffill().bfill())
.assign(source_id = df['source_id']))
print (df1)
id col1 col2 col3 source_id
0 a1 765.3 234 cat a5
1 a2 3298.3 None dog a4
2 a3 8762.1 27 rat a8
3 a4 3298.3 None dog None
4 a5 765.3 234 cat a6
5 a6 765.3 234 cat None
df = df.set_index('id')