最近、私はR
かなりを使用してきたし、そこに私はこのように解決するだろう:
library(data.table)
library(dplyr)
library(tidyr)
x <- fread('
Idx Name Cheese1 Cheese2 Cheese3
0 Evan Gouda NaN NaN
1 John Cheddar Havarti Blue
2 Evan Cheddar Gouda NaN
3 John Havarti Swiss NaN', na = 'NaN')
gather(x, , Cheese, matches('Cheese'), na.rm = T) %>%
group_by(Name, Cheese) %>%
summarise(n = n()) %>%
group_by(Name) %>%
mutate(p = n/sum(n)) %>%
filter(p == max(p)) %>%
select(-n)
出力:
Name Cheese p
(chr) (chr) (dbl)
1 Evan Gouda 0.6666667
2 John Havarti 0.4000000
を
私は見ることに興味があった同じようなことがパンダのようにどのように見えるか。 R
として間違いなく
Name Cheese p
1 Evan Gouda 0.666667
4 John Havarti 0.400000
としてきれいではない、多分パンダとのより多くの知り合いの誰かがこれを改善する方法で重量を量ることができます:出力
import io
import pandas as pd
x = pd.read_csv(io.StringIO('''
Idx Name Cheese1 Cheese2 Cheese3
0 Evan Gouda NaN NaN
1 John Cheddar Havarti Blue
2 Evan Cheddar Gouda NaN
3 John Havarti Swiss NaN'''), delim_whitespace=True)
tidy = pd.melt(x, ['Idx', 'Name'], value_name='Cheese').dropna()
tidy = tidy.groupby(['Name', 'Cheese']).size().reset_index(name='n')
tidy['p'] = tidy.groupby('Name')['n'].transform(lambda n: n/sum(n))
tidy[tidy['p'] == tidy.groupby('Name')['p'].transform('max')].drop('n', 1)
:これは私が思いついたものです。
あなたは 'big_cheese'という名前の機会を逃しました – piRSquared
これはうまくいきますが、すべての人が同じ最も一般的なチーズを持っているときに壊れます。代わりに、列ヘッダーではなくインデックスとして名前を指定します。それを修正する方法はありますか? – user3329648
私はインデックスやカラム名を取得するためにtry-except文を使って多少の修正を加えましたが、それはjankyです。 – user3329648