Python 我需要根据列上的值从pandas dataframe生成一个真值表
我有这样一个数据帧:Python 我需要根据列上的值从pandas dataframe生成一个真值表,python,pandas,dataframe,Python,Pandas,Dataframe,我有这样一个数据帧: name vals 0 foo X 1 foo Y 2 foo Z 3 bar Y 4 bar Z 5 bar Q Q X Y Z name foo 0 1 1 1 bar 1 0 1 1 我如何将其转换为这样: name vals 0 foo X 1 foo Y 2 foo Z 3 bar Y 4 bar Z 5
name vals
0 foo X
1 foo Y
2 foo Z
3 bar Y
4 bar Z
5 bar Q
Q X Y Z
name
foo 0 1 1 1
bar 1 0 1 1
我如何将其转换为这样:
name vals
0 foo X
1 foo Y
2 foo Z
3 bar Y
4 bar Z
5 bar Q
Q X Y Z
name
foo 0 1 1 1
bar 1 0 1 1
第一个df的代码:
df = pd.DataFrame({"name": ["foo", "foo", "foo",
"bar", "bar", "bar"],
"vals": ["X", "Y", "Z",
"Y", "Z", "Q"],
})
IIUC
groupby
pd.factorize
和切片分配
这将为存在分配一个,但不计算总发生率
i, r = pd.factorize(df.name)
j, c = pd.factorize(df.vals)
b = np.zeros((r.size, c.size), int)
b[i, j] = 1
pd.DataFrame(b, r, c)
X Y Z Q
foo 1 1 1 0
bar 0 1 1 1
pd.factorize
和np.bincount
非常感谢您的快速回复。我也喜欢这个答案(-:参见问题9)
i, r = pd.factorize(df.name)
j, c = pd.factorize(df.vals)
n, m = len(r), len(c)
b = np.bincount(i * m + j, minlength=n * m).reshape(n, m)
pd.DataFrame(b, r, c)
X Y Z Q
foo 1 1 1 0
bar 0 1 1 1