【问题标题】:python group by based on column headerspython group by 基于列标题
【发布时间】:2018-07-10 10:22:43
【问题描述】:

我有 744 行 186 列的 csv 文件,格式如下:

 Label   1          1         0         0         1
 TaxID   P_ERR161   P_ERR162  P_ERR163  P_ERR164  P_ERR165 
 333046  0.05       0         22.33     0.06      7.32
 1049    0.03       0         0.04      0.01      0.02
 337090  0.01       0         9.79      45.88     3.99   
 288681  3.6        0         1.03      251.01    8.11

我需要根据标签 0 和 1 将行值分组到两个单独的数据帧中。我看过其他帖子,但无法找到解决我的问题的方法。我需要这个来进行统计分析,例如 t 检验、wilcoxon 秩和检验。

我已经试过了:

df = pd.read_csv('final_out_transposed.csv')
case = df.where(df.Label == 1).dropna()['SRA ID']
ctrl = df.where(df.Label == 2).dropna()['SRA ID']

但这对我没有帮助。任何帮助都会非常有用。

提前致谢。

【问题讨论】:

  • 你能提供一个minimal reproducible example吗?具体来说,如果您可以打印df.head(5),那将非常有帮助。这样我们就可以轻松地测试我们作为答案提供的代码。
  • @jp_data_analysis 确定我会编辑问题。
  • 所以你想要 2 个数据帧,一个只有 0 列,一个只有 1 列,对吗?这通常称为“切片”,而不是“分组”——这是为我们根据字段/标准聚合数据时保留的。
  • 我认为您需要的是 MultiIndex:请参阅 pandas.pydata.org/pandas-docs/stable/…
  • @jp_data_analysis 是的,有两个不同的数据框,一个带有列标题 0,另一个带有列标题 1。对不起,我是 python 新手,因此不太好。

标签: python-3.x pandas csv dataframe pandas-groupby


【解决方案1】:

我认为您需要csv 中第二行和第三行的Multiindex 参数header,然后通过xs 查找:

df  = pd.read_csv('final_out_transposed.csv', header=[1,2], index_col=[0])
#print (df.head())


case = df.xs('0', axis=1, level=0).dropna()
#print (case.head())

ctrl = df.xs('1', axis=1, level=0).dropna()
#print (ctrl.head())

【讨论】:

  • @jezreal 我怎么能接受 186 行:MultiIndex(levels=[['0', '1'], ['P_ERR161', 'P_ERR162', 'P_ERR163', 'P_ERR164', 'P_ERR165']] labels=[[1, 1, 0, 0, 1], [0, 1, 2, 3, 4]],
  • 您的数据保密吗?
  • @jezreal 不,不是
  • 非常感谢您的帮助。 :) 我会检查它是如何为我工作的
  • 嗨,实际上问题是由 Pandas DataFrame 的xs 方法创建的对象看起来像二维数组。当传递给ttest_ind 时,这些必须被展平以看起来像一维数组。 Pandas 对象的values 属性给出了一个numpy 数组,ravel() 方法将数组展平为一维。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-30
  • 2021-01-24
  • 1970-01-01
  • 2013-11-02
  • 1970-01-01
相关资源
最近更新 更多