我有类似这样的列表清单:
[[person_a,code_1],[person_a,code_2],[person_a,code_3],[person_b,code_1],[person_b,code_1],[person_b,code_1],[person_a,code_4],[person_b,code_2]...]
我希望实现以下目标:
code_1 code_2 code_3 code_4
person a .2500 .2500 .2500 .2500
person b .6667 .3333 0.0 0.0
我以前在R中使用prop.table
来实现此目的,但我想知道是否有Python等效项。我可以将列表列表转换为数据框,我感兴趣的是一些可以生成每个人代码比例的函数。
答案 0 :(得分:1)
使用熊猫
import pandas as pd
data = [
['person_a', 'code_1'],
['person_a', 'code_2'],
['person_a', 'code_3'],
['person_b', 'code_1'],
['person_b', 'code_1'],
['person_b', 'code_1'],
['person_a', 'code_4'],
['person_b', 'code_2']]
df = pd.DataFrame(data, columns=['person', 'code'])
df = df.assign(relative_frequency=1).groupby(['person', 'code']).count().unstack()
# >>> df
# relative_frequency
# code code_1 code_2 code_3 code_4
# person
# person_a 1 1 1 1
# person_b 3 1 NaN NaN
>>> df.div(df.sum(1), axis=0)
relative_frequency
code code_1 code_2 code_3 code_4
person
person_a 0.25 0.25 0.25 0.25
person_b 0.75 0.25 NaN NaN