![](/img/trans.png)
[英]Python groupby - Create a new column based on values in other columns
[英]Add a new column with values based on groupby values two other columns
我正在嘗試根據原始數據框的 groupby 向數據框添加一個新列,並根據該 groupby 的結果分配三個值之一
即在下面的 df 中,我想添加第四列來顯示我是否有太多的“A”、太多的“C”,或者恰到好處的數量。
col1 col2 col3
0 1111 A 1
1 1111 B 3
2 1111 B 3
3 1111 B 3
4 1111 C 1
5 2222 A 1
6 2222 B 1
7 2222 C 2
8 2222 C 2
9 3333 A 2
10 3333 A 2
11 3333 B 1
12 3333 C 1
變成...
col1 col2 col3 col4
0 1111 A 1 OK
1 1111 B 3 OK
2 1111 B 3 OK
3 1111 B 3 OK
4 1111 C 1 OK
5 2222 A 1 >C
6 2222 B 1 >C
7 2222 C 2 >C
8 2222 C 2 >C
9 3333 A 2 >A
10 3333 A 2 >A
11 3333 B 1 >A
12 3333 C 1 >A
我正在考慮使用轉換,但返回系列,我認為在這種情況下我需要檢查兩個不同的列?
例子:
d1 = {'col1': ['1111', '1111', '1111', '1111', '1111', '2222', '2222', '2222', '2222', '3333', '3333', '3333', '3333'],
'col2': ['A', 'B', 'B', 'B', 'C', 'A', 'B', 'C', 'C', 'A', 'A', 'B', 'C'],
'col3': [1, 3, 3, 3, 1, 1, 1, 2, 2, 2, 2, 1, 1]}
df1 = pd.DataFrame(data=d1)
d2 = {'col1': ['1111', '1111', '1111', '1111', '1111', '2222', '2222', '2222', '2222', '3333', '3333', '3333', '3333'],
'col2': ['A', 'B', 'B', 'B', 'C', 'A', 'B', 'C', 'C', 'A', 'A', 'B', 'C'],
'col3': [1, 3, 3, 3, 1, 1, 1, 2, 2, 2, 2, 1, 1],
'col4': ['OK', 'OK', 'OK', 'OK', 'OK', '>C', '>C', '>C', '>C', '>A', '>A', '>A', '>A']}
df2 = pd.DataFrame(data=d2)
print(df1)
print(df2)
據我了解,試試這個:
使用col2
wrt col1
值的counts using crosstab
,然后使用.loc[]
過濾您要考慮的值,然后使用df.gt
比較計數是否大於 1 並與列名進行dot
乘,最后將其map
回series.fillna
解決方案:
values_to_filter = ['A','C'] #put B for testing and it will show >B for first group
m = pd.crosstab(df1['col1'],df1['col2']).loc[:,values_to_filter]
df1['col4'] = (df1['col1'].map(m.gt(1).dot(m.columns).replace('',np.nan)
.radd('>')).fillna('OK'))
輸出:
print(df1)
col1 col2 col3 col4
0 1111 A 1 OK
1 1111 B 3 OK
2 1111 B 3 OK
3 1111 B 3 OK
4 1111 C 1 OK
5 2222 A 1 >C
6 2222 B 1 >C
7 2222 C 2 >C
8 2222 C 2 >C
9 3333 A 2 >A
10 3333 A 2 >A
11 3333 B 1 >A
12 3333 C 1 >A
其他詳細信息:其中m
是col2
值 wrt col1
值的計數:
print(m)
col2 A C
col1
1111 1 1
2222 1 2
3333 2 1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.