我在不规则数量的列中有一系列数据,我需要使用 Pandas 从跨多列的拆分部分中确定最常见的值。我的意思的一个例子是,如果我有关于我的同事每天午餐吃什么样的奶酪的信息:
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
我正在寻找某种能够提供结果数据透视表的功能:
Name Cheese Pct
Evan Gouda .66
John Havarti .4
我也不知道每次运行脚本时需要包含多少列,只知道它们都是“奶酪”+索引的格式。如果约翰第二天带着四个奶酪出现,我将需要添加第四列,并且分析脚本需要能够处理它。
最佳答案
import io
import pandas as pd
data = 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
4 Rick NaN NaN NaN
""")
df = pd.read_csv(data, delim_whitespace=True)
def top_cheese(g):
cheese_cols = [col for col in g.columns if col.startswith('Cheese')]
try:
out = (g[cheese_cols].stack().value_counts(normalize=True)
.reset_index().iloc[0])
out.index = ['Cheese', 'Pct']
return out
except IndexError:
return pd.Series({'Cheese': 'None', 'Pct': 0})
output = df.groupby('Name').apply(top_cheese)
print(output)
输出:
Cheese Pct
Name
Evan Gouda 0.666667
John Havarti 0.400000
Rick None 0.000000
关于python - Pandas 中多列的最常见值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38357461/