这df是你的 Pandas DataFrame。
def new_1(g):
return ','.join(g.gene)
def new_2(g):
return ','.join(g.gene + '-' + g.status)
new_1_data = df.groupby("sample").apply(new_1).to_frame(name="new_1")
new_2_data = df.groupby("sample").apply(new_2).to_frame(name="new_2")
new_data = pd.merge(new_1_data, new_2_data, on="sample")
new_df = pd.merge(df, new_data, on="sample").drop_duplicates("sample")
Run Code Online (Sandbox Code Playgroud)
如果您希望将“sample”作为列而不是索引,则添加
new_df = new_df.reset_index(drop=True)
Run Code Online (Sandbox Code Playgroud)
最后,由于您没有指定要保留哪些原始重复行,我只是使用 Pandas 的默认行为并删除除第一次出现之外的所有行。
我将您的示例转换为以下 CSV 文件(以“,”分隔),我将其称为“data.csv”。
sample,gene,status
ppar,p53,gain
ppar,gata,gain
ppar,nb,loss
srty,nf1,gain
srty,cat,gain
srty,cd23,gain
tygd,brac1,loss
tygd,brac2,gain
tygd,ras,loss
Run Code Online (Sandbox Code Playgroud)
我将此数据加载为
# Default delimiter is ','. Pass `sep` argument to specify delimiter.
df = pd.read_csv("data.csv")
Run Code Online (Sandbox Code Playgroud)
运行上面的代码并打印数据帧会产生输出
sample gene status new_1 new_2
0 ppar p53 gain p53,gata,nb p53-gain,gata-gain,nb-loss
3 srty nf1 gain nf1,cat,cd23 nf1-gain,cat-gain,cd23-gain
6 tygd brac1 loss brac1,brac2,ras brac1-loss,brac2-gain,ras-loss
Run Code Online (Sandbox Code Playgroud)
这正是您的示例中给出的预期输出。
请注意,最左边的数字列 (0, 3, 6) 是合并后生成的原始数据帧索引的剩余部分。当您将此数据帧写入文件时,您可以通过设置排除index=False它df.to_csv(...)。
我检查了您通过电子邮件发送给我的 CSV 文件。CSV 文件标题中的“gene”一词后面有一个空格。
将 CSV 文件的第一行从
sample,gene ,status
Run Code Online (Sandbox Code Playgroud)
到
sample,gene,status
Run Code Online (Sandbox Code Playgroud)
此外,您的条目中还有空格。如果您想删除它们,您可以
# Strip spaces from entries. Only works for string entries
df = df.applymap(lambda x: x.strip())
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3778 次 |
| 最近记录: |