我有一個資料幀,例如
Groups SP Letters
G1 SP1 A
G1 SP1 Z
G1 SP1 A
G1 SP2 X
G1 SP3 X
G1 SP4 B
G2 SP2 A
G2 SP5 B
G2 SP3 X
G2 SP23 A
我想添加一列 ( Nb_column) ,它是SP每個列中唯一值的計數,Groups但在Letters串列中的位置the_list=['A','B']
在這里我應該得到:
Groups SP Letters Nb_column
G1 SP1 A 2
G1 SP1 Z 2
G1 SP1 A 2
G1 SP2 X 2
G1 SP3 X 2
G1 SP4 B 2
G2 SP2 A 3
G2 SP5 B 3
G2 SP3 X 3
G2 SP23 A 3
在哪里
- 有2
SP(SP1,SP4)以Letters在the_list為G1。和 - 有3
SP(SP2,SP5和SP23)用Letters在the_list為G2。
有人對熊貓有想法嗎?
uj5u.com熱心網友回復:
您可以使用groupby transform nunique對SP的屏蔽版本(默認情況下,NaN是不被計算nunique):
df['Nb_columns'] = (df['SP'].where(df['Letters'].isin(the_list))
.groupby(df['Groups']).transform('nunique')
)
輸出:
Groups SP Letters Nb_columns
0 G1 SP1 A 2
1 G1 SP1 Z 2
2 G1 SP1 A 2
3 G1 SP2 X 2
4 G1 SP3 X 2
5 G1 SP4 B 2
6 G2 SP2 A 3
7 G2 SP5 B 3
8 G2 SP3 X 3
9 G2 SP23 A 3
uj5u.com熱心網友回復:
使用isin以檢查是否存在,然后groupby().nunique()和映射回:
nb = df[df['Letters'].isin(lst)].groupby('Groups')['SP'].nunique()
df['Nb_column'] = df['Groups'].map(nb)
uj5u.com熱心網友回復:
我們可以從選擇SP列基于其中使用再使用,讓每組唯一值的相應數字。然后和回資料幀進行對齊新列:Letters isin the_listlocgroupby nuniquerenamejoinGroups
df = df.join(
df.loc[df['Letters'].isin(the_list), 'SP']
.groupby(df['Groups']).nunique()
.rename('Nb_column'),
on='Groups'
)
或者,join我們可以reindex縮放并從中創建新列:
df['Nb_column'] = (
df.loc[df['Letters'].isin(the_list), 'SP']
.groupby(df['Groups']).transform('nunique')
.reindex(index=df.index, method='ffill')
)
df:
Groups SP Letters Nb_column
0 G1 SP1 A 2
1 G1 SP1 Z 2
2 G1 SP1 A 2
3 G1 SP2 X 2
4 G1 SP3 X 2
5 G1 SP4 B 2
6 G2 SP2 A 3
7 G2 SP5 B 3
8 G2 SP3 X 3
9 G2 SP23 A 3
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/347395.html
