我有一个数据帧,其中一些行具有父子关系。例如,1002是1003的父级,1003是1004的父级
import pandas as pd
import numpy as np
df = pd.DataFrame(columns=['Id', 'Parent Id', 'Child Id', 'A', 'B'],
data=[[1001, np.nan, 1005, 'A1001', 'B1001'],
[1002, np.nan, 1003, 'A1002', 'B1002'],
[1003, 1002, 1004, 'A1003', np.nan],
[1004, 1003, np.nan, 'A1004', np.nan],
[1005, 1001, np.nan, 'A1005', np.nan]
])
print(df)
Id Parent Id Child Id A B
0 1001 NaN 1005.0 A1001 B1001
1 1002 NaN 1003.0 A1002 B1002
2 1003 1002.0 1004.0 A1003 NaN
3 1004 1003.0 NaN A1004 NaN
4 1005 1001.0 NaN A1005 NaN
我想合并这些行,只保留那些没有子项的行。我知道我可以用它
df = df[df['Child Id'].isnull()]
但是,有些信息只出现在父行中,而子行中缺少,例如1002中的“B”列。我想把它继承到最新的子行。你知道吗
以下是预期输出:
Id Parent Id Child Id A B
3 1004 1003.0 NaN A1004 B1002
4 1005 1001.0 NaN A1005 B1001
我可以使用内置的pandas方法来代替迭代行吗?你知道吗
您需要在父子关系链的
B
列中获取值。您可以使用:其中
max_length_of_relationships
是一个链中的最大父子链接数(df中的2:1)。10002-10003,2.10003-10004),如果您不确定数字是什么,请使用不能超过的大数字。 然后只保留没有childs的行,就像处理:相关问题 更多 >
编程相关推荐