gpt4 book ai didi

python - 使用 groupby 和 cumcount (pandas) 计算每列的连续字符串

转载 作者:行者123 更新时间:2023-12-05 09:32:12 28 4
gpt4 key购买 nike

我有一个如下所示的 df:

df = pd.DataFrame({"child": ["A", "B", "C", "D", "E", "D", "A"],
"birth": ["2000-07-29", "2000-08-03", "2000-09-10", "2000-09-10", "2000-11-02", "2000-09-10", "2000-07-29"],
"parent": ["Z", "Z", "V", "V", "O", "V", "Z"],
"logic": ["abc", "abc", "efg", "efg", "opk", "zlm", "zlm"]})

我想添加一个 count 列,显示在给定的 birthdate 之前每个 parent 有多少个 unique child 。

期望的结果df_new:

child     birth        parent    logic      count
A 2000-07-29 Z abc 1
B 2000-08-03 Z abc 2
C 2000-09-10 V efg 2
D 2000-09-10 V efg 2
E 2000-11-02 O opk 1

我尝试了以下代码:

df_new = pd.DataFrame(df)
df_new = df_new.drop_duplicates(subset=["parent", "child"]).sort_values(by=["parent", "birth"])
df_new["count"] = df_new.groupby("parent").cumcount()+1

首先,我删除了基于parentchild 的重复项,这样同一个 child 就不会被加起来。然后,我按 parentbirthdf_new 进行排序,这样就可以连续计算 parent 的出现次数cumcount 以可视化每个 parent 的 child 数量。

遗憾的是,它不考虑在同一日期多次出现

取得的成果df_new:

child     birth        parent    logic      count
A 2000-07-29 Z abc 1
B 2000-08-03 Z abc 2
C 2000-09-10 V efg 1 # this should be 2 as well!
D 2000-09-10 V efg 2
E 2000-11-02 O opk 1

有没有人知道如何解决这个问题?随意建议其他方法!感谢您的帮助!

最佳答案

这里有一种解决方法:

df = (
df_new.set_index(['parent', 'birth'])
.join(
df_new.groupby('parent')
.apply(lambda x: x.groupby('birth')['child'].agg('count').cumsum()),
rsuffix='count')
.reset_index()
)

输出:

  parent      birth child logic  childcount
0 O 2000-11-02 E opk 1
1 V 2000-09-10 C efg 2
2 V 2000-09-10 D efg 2
3 Z 2000-07-29 A abc 1
4 Z 2000-08-03 B abc 2

关于python - 使用 groupby 和 cumcount (pandas) 计算每列的连续字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68337488/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com