簡體   English   中英

groupby 在熊貓的兩列中計算相同的值?

[英]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保留合並列( name1name2不同值)。 因此,預期的輸出是以下數據幀:

name   new
   A     7
   B     4
   C     1

我試過了

df.groupby(["name1"]).count().groupby(["name2"]).count()等等...但雖然最后一個似乎給了我正確的結果,但我不能獲取連接的數據集。

您可以將value_countsdf.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.appendSeries.value_counts

df['name1'].append(df['name2']).value_counts()

A    7
B    4
C    1
dtype: int64

value_counts將聚合列轉換為索引。 要獲得所需的輸出,請使用rename_axisreset_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM