我有一个如下所示的数据框:
姓名
日期
第 1 列
列2
一种
2021-03-01
0
1
一种
2021-03-02
0
0
一种
2021-03-03
3
1
一种
2021-03-04
1
0
一种
2021-03-05
3
1
一种
2021-03-06
1
0
乙
2021-03-01
1
0
乙
2021-03-02
2
0
乙
2021-03-03
3
1
乙
2021-03-04
0
1
乙
2021-03-05
0
0
乙
2021-03-06
0
0
我想按名称分组并找到其他非日期列的非零条目(基本上不包括任何前导或尾随零)所跨越的天数,以获得类似的结果:
姓名
第 1 列
列2
一种
4
5
乙
3
2
如何在不诉诸 for 循环的情况下做到这一点?
最佳答案
我想, np.trim_zeros
是你要找的:
>>> import numpy as np; import pandas as pd
>>> df = pd.DataFrame.from_dict({'name': ['A']*6 + ['B']*6, 'col1': [0, 0, 3, 1, 3, 1, 1, 2, 3, 0, 0, 0], 'col2': [1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0]})
>>> df
name col1 col2
0 A 0 1
1 A 0 0
2 A 3 1
3 A 1 0
4 A 3 1
5 A 1 0
6 B 1 0
7 B 2 0
8 B 3 1
9 B 0 1
10 B 0 0
11 B 0 0
>>> df.groupby('name').aggregate(lambda x: len(np.trim_zeros(x))).reset_index()
name col1 col2
0 A 4 5
1 B 3 2
关于python - Groupby pandas 但对多列执行计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66910047/