Skip to main content
 首页 » 编程设计

python之在 pandas 中使用列值和标题并自动填充表

2025年05月04日13linjiqin

我有一个 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