我有以下pandas資料框架:
我有以下pandas資料框架:
df = pd. DataFrame({'id': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10】。]
'x'。['A', 'A/span>, 'A', 'A', 'C', 'C','E', 'G', 'G', 'G'] 。
'y': ['B', 'B', 'B', 'B', 'D', 'D', 'F', 'H', 'H', 'H'] 。
'year': [1990, 1991, 1992, 1993, 1994, 1999, 1999, 2001, 2002, 2010] })
id x y year
0 1 A B 1990
1 2 甲乙 1991
2 3 甲乙 1992
3 4 甲乙 1993
4 5 C D 1994
5 6 C D 1999年
6 7 E F1999
7 8 G H2001
8 9 G H2002
9 10 G H 2010
對于每個groupby(['x', 'y']),我只需要計算年份在該組的最小年份和年份 4之間的id
預期的結果:
x y count_id
0A B 4
1 C D 1
2 E F 1
3 G H 2
uj5u.com熱心網友回復:
你可以groupby和apply:
print (df. groupby(["x","y"])["year"] 。 apply(lambda d: (d-d.min()).le(4).sum()
x y
A B 4.
C D1
E F1
G H2
名稱:年,dtype:int64
uj5u.com熱心網友回復:
我們可以根據年份小于或等于4年的地方創建一個掩碼,從組的最小值(groupby transform,然后過濾和groupby到count的id的數量:
cols = ['x'/span>, 'y'/span>]
m = df['year'].sub(df.groupby(cols)['year'].transform('min')) .le(4)
new_df = df[m].groupby(cols, as_index=False)['id'].count()
或者用nunique如果只想得到唯一的id計數:
cols = ['x'/span>, 'y'/span>]
m = df['year'].sub(df.groupby(cols)['year'].transform('min')) .le(4)
new_df = df[m].groupby(cols, as_index=False)['id'].nunique()
new_df:
x y id。
0 A B 4
1 C D 1
2 E F 1
3 G H 2
uj5u.com熱心網友回復:
使用.groupby Series.between:
x = (
df.groupby(["x"/span>, "y"/span>])
.apply(lambda x: x["year"].between((mn := x["year"] 。 min(), mn 4).sum()
.reset_index(name="count_id")
)
print(x)
列印:
x y count_id
0 A B 4
1 C D 1
2 E F 1
3 G H 2
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/309178.html
標籤:
