[英]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.