簡體   English   中英

Pandas 在不同的列中計算相同的值

[英]Pandas counting same values in differents columns

我想計算不同列中所有相同的值。 這里有一個更好的解釋,我有這個 df

df= pd.DataFrame([['Id1',1, 0, 'b', 'j'], ['Id2', 0, 2, 'c', 'g'], ['Id2',0, 1, 2,'je']]) 
df= df.rename({0:'IDcol', 1:'col1', 2:'col2', 3:'col3', 4:'col4'}, axis=1)
df

這將顯示以下df

    IDcol   col1    col2    col3    col4
0   Id1     1       0       b       j
1   Id2     0       2       c       g
2   Id2     0       1       2       je

然后計算 col1 和 col2 中的所有值並得到如下結果:


    values  count
0      0      3
1      1      2
2      2      1

作為應該由 IDcol 輕松分組的額外部分,然后得到如下內容:

    Id   values count
0   Id1    0    1
1   Id1    1    1
2   Id1    2    0
3   Id2    0    2
4   Id2    1    1
5   Id2    2    0

我已經嘗試了 groupby、size 和 values_count 的不同組合,但是我對 size 和 value_count 的了解並沒有那么廣泛,所以我可能遺漏了一些東西。

我也認為這應該可以使用理解列表來實現,但如果可以使用 pandas 函數,那么處理時間會更好。

筆記:

1)我在這個例子中使用了int,但這也應該適用於字符串。

2)如果沒有更好地手動引入值。

您可以使用df.append然后使用pd.Series.value_counts

df['col1'].append(df['col2']).value_counts()

0    3
1    2
2    1
res = (df.set_index("IDcol")
       .filter(['col1','col2'])
       .stack()
       .groupby(level=0)
       .value_counts()
       .unstack(fill_value=0)
       .stack()
       .reset_index(name='count')
       .rename(columns={"level_1":"values"})
      )

res


   IDcol    values  count
0   Id1         0   1
1   Id1         1   1
2   Id1         2   0
3   Id2         0   2
4   Id2         1   1
5   Id2         2   1

@Ch3steR 的解決方案對於解決方案 1 來說要短得多。希望有人為解決方案 2 提出更簡潔的方案

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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