Python 使用列值和标题,并在表格中自动填充表格
我有一个df,我想使用两列(sample,var),这样var列中的唯一值成为索引,sample-other列中的唯一值成为新列名。然后,我想在原始df中有一行同时出现给定样本和var的地方,用“True”填充该表,在没有同时出现样本和var的地方,用na填充该表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 如果已经有一个问题可以回答这个问题,我道歉。我对熊猫还不
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很高兴它对我有帮助,我返回我的答案是为了帮助,而不是为了名誉~祝您愉快这是一个非常有用且解释得很好的答案,但与其他两个解决方案相比相当复杂。不过,删除副本是一个很好的额外想法。非常感谢这是一个非常有用且解释得很好的答案,但与其他两个解决方案相比相当复杂。不过,删除副本是一个很好的额外想法。非常感谢