[英]groupby count same values in two columns in pandas?
我有以下熊貓數據框:
name1 name2
A B
A A
A C
A A
B B
B A
我想添加一個名為 new 的列,它計算name1
OR name2
保留合並列( name1
和name2
不同值)。 因此,預期的輸出是以下數據幀:
name new
A 7
B 4
C 1
我試過了
df.groupby(["name1"]).count().groupby(["name2"]).count()
等等...但雖然最后一個似乎給了我正確的結果,但我不能獲取連接的數據集。
您可以將value_counts
與df.stack()
:
df[['name1','name2']].stack().value_counts()
#df.stack().value_counts() for all cols
A 7
B 4
C 1
具體來說:
(df[['name1','name2']].stack().value_counts().
to_frame('new').rename_axis('name').reset_index())
name new
0 A 7
1 B 4
2 C 1
讓我們嘗試melt
df.melt().value.value_counts()
Out[17]:
A 7
B 4
C 1
Name: value, dtype: int64
或者,
df.name1.value_counts().add(df.name2.value_counts(), fill_value=0).astype(int)
給你
A 7
B 4
C 1
dtype: int64
使用Series.append
和Series.value_counts
:
df['name1'].append(df['name2']).value_counts()
A 7
B 4
C 1
dtype: int64
value_counts
將聚合列轉換為索引。 要獲得所需的輸出,請使用rename_axis
和reset_index
:
df['name1'].append(df['name2']).value_counts().rename_axis('name').reset_index(name='new')
name new
0 A 7
1 B 4
2 C 1
python Counter
是另一種解決方案
from collections import Counter
s = pd.Series(Counter(df.to_numpy().flatten()))
In [1325]: s
Out[1325]:
A 7
B 4
C 1
dtype: int64
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.