【发布时间】:2019-09-24 13:51:14
【问题描述】:
我有一个数据框,其中某些行具有父子关系。比如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 方法来代替迭代行吗?
【问题讨论】:
-
您是如何确定值“B1002”属于 Id 1004 的?
-
不确定第二行的 A1004 与您的数据框不匹配:您可以尝试
df.ffill()[df['Child Id'].isnull()]或类似的东西吗? -
@Datanovice 感谢您的建议,它与我正在寻找的类似。但它可能不是一个很好的顺序来填充。它会填充我不想填写的“儿童 ID”列(抱歉 A1004 是一个错字,我已经更正了我的问题)
-
@Aryere "B1002" for 1004 继承自它的父级 (1003) 的父级 (1002)
标签: python python-3.x pandas dataframe