当前位置: 首页 > 面试题库 >

如何在Pandas数据框中传播列

齐振
2023-03-14
问题内容

我有以下熊猫数据框:

import pandas as pd
import numpy as np
df = pd.DataFrame({
               'fc': [100,100,112,1.3,14,125],
               'sample_id': ['S1','S1','S1','S2','S2','S2'],
               'gene_symbol': ['a', 'b', 'c', 'a', 'b', 'c'],
               })

df = df[['gene_symbol', 'sample_id', 'fc']]
df

产生此结果:

Out[11]:
  gene_symbol sample_id     fc
0           a        S1  100.0
1           b        S1  100.0
2           c        S1  112.0
3           a        S2    1.3
4           b        S2   14.0
5           c        S2  125.0

我如何传播,sample_id以便最终得到这个:

gene_symbol    S1   S2
a             100   1.3
b             100   14.0
c             112   125.0

问题答案:

使用pivotunstack

#df = df[['gene_symbol', 'sample_id', 'fc']]
df = df.pivot(index='gene_symbol',columns='sample_id',values='fc')
print (df)
sample_id       S1     S2
gene_symbol              
a            100.0    1.3
b            100.0   14.0
c            112.0  125.0
df = df.set_index(['gene_symbol','sample_id'])['fc'].unstack(fill_value=0)
print (df)
sample_id       S1     S2
gene_symbol              
a            100.0    1.3
b            100.0   14.0
c            112.0  125.0

但是,如果重复,需要pivot_table或集合体groupby,或mean可以改变summedian…:

df = pd.DataFrame({
               'fc': [100,100,112,1.3,14,125, 100],
               'sample_id': ['S1','S1','S1','S2','S2','S2', 'S2'],
               'gene_symbol': ['a', 'b', 'c', 'a', 'b', 'c', 'c'],
               })
print (df)
      fc gene_symbol sample_id
0  100.0           a        S1
1  100.0           b        S1
2  112.0           c        S1
3    1.3           a        S2
4   14.0           b        S2
5  125.0           c        S2 <- same c, S2, different fc
6  100.0           c        S2 <- same c, S2, different fc



df = df.pivot(index='gene_symbol',columns='sample_id',values='fc')

ValueError:索引包含重复的条目,无法重塑

df = df.pivot_table(index='gene_symbol',columns='sample_id',values='fc', aggfunc='mean')
print (df)
sample_id       S1     S2
gene_symbol              
a            100.0    1.3
b            100.0   14.0
c            112.0  112.5
df = df.groupby(['gene_symbol','sample_id'])['fc'].mean().unstack(fill_value=0)
print (df)
sample_id       S1     S2
gene_symbol              
a            100.0    1.3
b            100.0   14.0
c            112.0  112.5

编辑:

对于设置columns nameNone和的清洁reset_index

df.columns.name = None
df = df.reset_index()
print (df)
  gene_symbol     S1     S2
0           a  100.0    1.3
1           b  100.0   14.0
2           c  112.0  112.5


 类似资料:
  • 问题内容: 这是我的数据框,应重复5次: 我想要这样的结果: 但是必须有一种比保持追加更聪明的方法。实际上,Im正在处理的数据帧应重复50次。 我还没有发现任何实用的东西,包括类似-—的东西,但它在数据框架上不起作用。 有人可以帮忙吗? 问题答案: 您可以使用以下功能: 如果只想重复值而不是索引,则可以执行以下操作:

  • 问题内容: 我从CSV文件加载了一些机器学习数据。前两列是观察值,其余两列是要素。 目前,我执行以下操作: 它给出了类似的东西: 我想两个dataframes切片此数据框:包含列一个和和包含一个列,和。 不可能写这样的东西 我不确定最好的方法是什么。我需要吗? 顺便说一下,我发现数据帧索引非常不一致:允许,但不允许。另一方面,不允许,但允许。是否有实际原因?如果列是由Int索引的,这确实令人困惑,

  • 问题内容: 我想在pandas数据框列中找到一个特定的模式,并返回相应的索引值以对数据框进行子集化。 这是带有可能模式的示例数据框: 生成数据框的代码段: 数据框: 下面,感兴趣的格局发生的日期来,这就是我想要结束了一下: 所需的输出: 如果同一模式多次出现,我希望以相同的方式对数据帧进行子集化,并计算该模式出现的次数,但是只要我将第一步弄清楚,我希望这会更直接。 感谢您的任何建议! 问题答案:

  • 问题内容: 我有以下for循环: 这样创建的每个数据框都具有与其他列相同的大多数列,但不是全部。而且,它们都只有一行。我需要的是将for循环产生的每个数据帧的所有不同列和每一行添加到数据帧中 我尝试了串联或类似的大熊猫,但似乎没有任何效果。任何想法?谢谢。 问题答案: 假设您的数据如下所示: 然后可以将其替换为 换句话说,不要为每一行形成一个新的DataFrame。相反,请收集字典列表中的所有数据

  • 问题内容: 我有一个像这样的数据框: 如你所见,月份不是按日历顺序排列的。因此,我创建了第二列以获取与每月(1-12)相对应的月份数。从那里,如何根据日历月的顺序对数据框进行排序? 问题答案: 用于按特定列的值对df进行排序: 如果要按两列排序,请将列标签列表传递给,并按排序优先级对列标签进行排序。如果使用,则结果将按列2然后按列排序。当然,对于这个示例,这实际上没有任何意义,因为其中的每个值都是

  • 问题内容: 我有2个数据框,一个命名为USERS,另一个命名为EXCLUDE。他们两个都有一个名为“电子邮件”的字段。 基本上,我要删除EXERSUDE中包含电子邮件的USERS中的每一行。 我该怎么做? 问题答案: 您可以将和条件一起使用,通过以下方式反转布尔值: 另一个解决方案: