使用 Pandas 汇总两列中的频率
Summarizing frequencies across two columns with Pandas
我正在寻找一个 Pandas 函数,它在给定由两列组成的 DataFrame
的情况下执行以下基本操作。给定第二列中的每个特定值,我想获得第一列中元素的条件分布。
这是一个例子。给定:
import pandas as pd
pd.DataFrame([['a', 'b'], ['a', 'b'], ['a', 'b'], ['b', 'b'], ['b', 'b'],['a','a']])
看起来像:
0 1
0 a b
1 a b
2 a b
3 b b
4 b b
5 a a
我们应该得到:
'a' 'b'
'a' 1 0.6
'b' 0 0.4
请注意,列的总和必须为 1,因为这些是频率分布。
import pandas as pd
data = pd.DataFrame([['a', 'b'], ['a', 'b'], ['a', 'b'], ['b', 'b'], ['b', 'b'],['a','a']])
#Answer:
pd.crosstab(data[0],data[1]).apply(lambda r: r/r.sum(), axis=0)
1 a b
0
a 1 0.6
b 0 0.4
我正在寻找一个 Pandas 函数,它在给定由两列组成的 DataFrame
的情况下执行以下基本操作。给定第二列中的每个特定值,我想获得第一列中元素的条件分布。
这是一个例子。给定:
import pandas as pd
pd.DataFrame([['a', 'b'], ['a', 'b'], ['a', 'b'], ['b', 'b'], ['b', 'b'],['a','a']])
看起来像:
0 1
0 a b
1 a b
2 a b
3 b b
4 b b
5 a a
我们应该得到:
'a' 'b'
'a' 1 0.6
'b' 0 0.4
请注意,列的总和必须为 1,因为这些是频率分布。
import pandas as pd
data = pd.DataFrame([['a', 'b'], ['a', 'b'], ['a', 'b'], ['b', 'b'], ['b', 'b'],['a','a']])
#Answer:
pd.crosstab(data[0],data[1]).apply(lambda r: r/r.sum(), axis=0)
1 a b
0
a 1 0.6
b 0 0.4