我有以下熊猫数据框:
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
使用pivot
或unstack
:
#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
可以改变sum
,median
…:
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 name
为None
和的清洁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中的每一行。 我该怎么做? 问题答案: 您可以将和条件一起使用,通过以下方式反转布尔值: 另一个解决方案: