[英]Count number of child records in dataframe
我有一个 pandas.DataFrame 列parentId
和id_x
。 我现在正在尝试创建一个新列,该列显示父条目中相关子项( id_x
)的数量。 一个条目(id)的相关 SQL 查询将是SELECT COUNT(*) AS amount FROM node WHERE parentId="1234qwer"
。 有没有办法为 pandas dataframe 中的每一行应用这个? 在 dataframe 中,父母也可能是更高父母的孩子。
编辑:
这是数据示例
df[["parentId", "id_x"]].head(4)
| parentId | id_x |
| ------------------------------------ | ------------------------------------ |
| 071cb2c2-d1be-4154-b6c7-a29728357ef3 | a061e7d7-95d2-4812-87c1-24ec24fc2dd2 |
| a061e7d7-95d2-4812-87c1-24ec24fc2dd2 | d2b62e36-b243-43ac-8e45-ed3f269d50b2 |
| None | 071cb2c2-d1be-4154-b6c7-a29728357ef3 |
| 071cb2c2-d1be-4154-b6c7-a29728357ef3 | a0e97b37-b9a1-4304-9769-b8c48cd9f184 |
有 n 个parentId
可以匹配id_x
。 我现在想创建一个新列来计算/显示与特定id_x
匹配的parentId
的数量。
结果应如下所示:
df[["parentId", "id_x", "Amount"]].head(4)
| parentId | id_x | Amount |
| ------------------------------------ | ------------------------------------ | ------ |
| 071cb2c2-d1be-4154-b6c7-a29728357ef3 | a061e7d7-95d2-4812-87c1-24ec24fc2dd2 | 1 |
| a061e7d7-95d2-4812-87c1-24ec24fc2dd2 | d2b62e36-b243-43ac-8e45-ed3f269d50b2 | 0 |
| None | 071cb2c2-d1be-4154-b6c7-a29728357ef3 | 2 |
| 071cb2c2-d1be-4154-b6c7-a29728357ef3 | a0e97b37-b9a1-4304-9769-b8c48cd9f184 | 0 |
输入:
>>> df
parentId id_x
0 071cb2c2-d1be-4154-b6c7-a29728357ef3 a061e7d7-95d2-4812-87c1-24ec24fc2dd2
1 a061e7d7-95d2-4812-87c1-24ec24fc2dd2 d2b62e36-b243-43ac-8e45-ed3f269d50b2
2 NaN 071cb2c2-d1be-4154-b6c7-a29728357ef3
3 071cb2c2-d1be-4154-b6c7-a29728357ef3 a0e97b37-b9a1-4304-9769-b8c48cd9f184
Output:
>>> df.assign(amount=df["id_x"].map(df["parentId"].value_counts()).fillna(0))
parentId id_x amount
0 071cb2c2-d1be-4154-b6c7-a29728357ef3 a061e7d7-95d2-4812-87c1-24ec24fc2dd2 1.0
1 a061e7d7-95d2-4812-87c1-24ec24fc2dd2 d2b62e36-b243-43ac-8e45-ed3f269d50b2 0.0
2 NaN 071cb2c2-d1be-4154-b6c7-a29728357ef3 2.0
3 071cb2c2-d1be-4154-b6c7-a29728357ef3 a0e97b37-b9a1-4304-9769-b8c48cd9f184 0.0
计算parentId
唯一值的数量和 map 它们到id_x
然后分配给您的 dataframe 的amount
列。
解决了
def node_counter(id_x, parent_ID):
counter = 0
for child in parent_ID:
if child == id_x:
counter += 1
return counter
df['Amount'] = df.apply(lambda x: node_counter(x['id_x'], df['parentId']), axis=1)
df
| parentId | id_x | Amount |
| ------------------------------------ | ------------------------------------ | ------ |
| 071cb2c2-d1be-4154-b6c7-a29728357ef3 | a061e7d7-95d2-4812-87c1-24ec24fc2dd2 | 1 |
| a061e7d7-95d2-4812-87c1-24ec24fc2dd2 | d2b62e36-b243-43ac-8e45-ed3f269d50b2 | 0 |
| None | 071cb2c2-d1be-4154-b6c7-a29728357ef3 | 2 |
| 071cb2c2-d1be-4154-b6c7-a29728357ef3 | a0e97b37-b9a1-4304-9769-b8c48cd9f184 | 0 |
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.