我有一个 df,我想使用其中的 2 个列 (sample, var),这样来自 var 列的唯一值成为索引,来自 sample other col 的唯一值成为新的列名。然后,我想在原始 df 中有给定样本和 var 共同出现的行的任何地方用“True”填充表,并在样本和 var 没有共同出现的地方用 na 填充。
sample, var
s1, v1
s1, v2
s2, v1
s2, v3
会变成:
s1, s2
v1, T, T
v2, T, na
v3, na, T
如果已经有一个问题可以回答这个问题,我深表歉意。我是 Pandas 的新手,不确定要搜索的技术词。我试过 this possible anser但它对我不起作用,返回的表格中的样本仍在一列中,而不是像这样的列标题:
pivot = df_all.pivot(index='VAR', columns='SAMPLE').stack(dropna=False)
print(pivot.head(20))
var, sample
v1, s1
v1, s2
v2, s1
v3, s2
Empty dataframe
Columns: []
Index: []
我也试过这个:
df_all['MUT']=True
pivot = df_all.pivot(index='VAR', columns='SAMPLE', values='MUT').stack(dropna=False)
print(pivot.head(20))
这返回了正确的信息,但样本仍在列中,而不是我预期的列名称。
目的是最终制作一个热图,所以如果有更好的解决方案来实现这一点,那也很好。我认为答案很简单,但我错过了,但我尝试搜索但找不到。我可能可以使用迭代来解决这个问题,但我真的在寻找一种矢量/ Pandas 类型的方法。非常感谢。
请您参考如下方法:
我会推荐pd.crosstab
pd.crosstab(df['var'],df['sample']).replace({1:'T',0:np.nan})
sample s1 s2
var
v1 T T
v2 T NaN
v3 NaN T
