Python 使用列值和标题,并在表格中自动填充表格

Python 使用列值和标题,并在表格中自动填充表格,python,pandas,dataframe,pivot,Python,Pandas,Dataframe,Pivot,我有一个df,我想使用两列(sample,var),这样var列中的唯一值成为索引,sample-other列中的唯一值成为新列名。然后,我想在原始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 如果已经有一个问题可以回答这个问题,我道歉。我对熊猫还不

我有一个df,我想使用两列(sample,var),这样var列中的唯一值成为索引,sample-other列中的唯一值成为新列名。然后,我想在原始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
如果已经有一个问题可以回答这个问题,我道歉。我对熊猫还不熟悉,不确定要搜索的技术词汇。我尝试过,但它对我不起作用,返回了一个表,其中示例仍在列中,而不是列标题,如下所示:

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))
这返回了正确的信息,但是样本仍然在列中,而不是我所期望的列名称

其目的是最终制作热图,因此如果有更好的解决方案来实现这一点,那么这也很好。我想答案很简单,我错过了,但我试着搜索,却找不到。我可能可以使用迭代来解决这个问题,但我确实在寻找向量/熊猫类型的方法。非常感谢。

您可以使用新的
True
列,然后通过以下方式重塑:

使用-for值创建的解决方案
True
系列
,长度与
df
相同:

df1 = pd.pivot(index=df['var'], 
               columns=df['sample'], 
               values=pd.Series([True] * len(df.index))) \
        .replace({None:np.nan})
print (df1)
sample    s1    s2
var               
v1      True  True
v2      True   NaN
v3       NaN  True
如果重复,则解决方案相同,只需先添加:

打印(df)
样本变量
0 s1 v1可以用于新的
True
列,然后通过以下方式重塑形状:

使用-for值创建的解决方案
True
系列
,长度与
df
相同:

df1 = pd.pivot(index=df['var'], 
               columns=df['sample'], 
               values=pd.Series([True] * len(df.index))) \
        .replace({None:np.nan})
print (df1)
sample    s1    s2
var               
v1      True  True
v2      True   NaN
v3       NaN  True
如果重复,则解决方案相同,只需先添加:

打印(df)
样本变量
0 s1 v1
输出:

         MUT      
sample    s1    s2
var               
v1      True  True
v2      True  None
v3      None  True
输出:

         MUT      
sample    s1    s2
var               
v1      True  True
v2      True  None
v3      None  True

我将推荐
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

我将推荐
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

感谢这一点,它真的很有帮助,因为它有一个额外的功能,可以替换表中填充自定义字符串的方式。我会将此作为可接受的答案,但Chris的答案是最接近我原始代码的修复方法。@user3062260很高兴它有帮助,我返回我的答案是为了帮助,而不是为了名誉~祝你有一个愉快的一天谢谢,它真的很有帮助a能够用自定义字符串替换表格的填充方式。我会将此作为公认的答案,但Chris的答案是最接近我原始代码的修复方法。@user3062260很高兴它对我有帮助,我返回我的答案是为了帮助,而不是为了名誉~祝您愉快这是一个非常有用且解释得很好的答案,但与其他两个解决方案相比相当复杂。不过,删除副本是一个很好的额外想法。非常感谢这是一个非常有用且解释得很好的答案,但与其他两个解决方案相比相当复杂。不过,删除副本是一个很好的额外想法。非常感谢