【问题标题】:Pandas groupby whether columns are the same or differentPandas groupby 列是否相同或不同
【发布时间】:2020-03-09 12:24:04
【问题描述】:

我想分析存储在 pandas 数据框中的成对比较(基因组):

Genome1 Genome2 SNPs Study1 Study2 Town1 Town2
      A       B    3     s1     s2    t1    t2
      A       C    6     s1     s3    t1    t2
      A       D    7     s1     s3    t1    t2
      A       E    8     s1     s4    t1    t3
      A       F    3     s1     s4    t1    t3

使用groupby,当研究 1 与研究 2 相同时,当它们不同时,与当城镇 1 与城镇 2 相同时,当它们不同时,我将如何获得 SNP?

【问题讨论】:

  • 请与我们分享预期的输出。

标签: python pandas pandas-groupby


【解决方案1】:

我想这就是你想要的。这里我们构造一个例子:

import pandas as pd

text = """Genome1 Genome2 SNPs Study1 Study2 Town1 Town2
      A       B    3     s2     s2    t1    t1
      A       C    6     s1     s3    t1    t1
      A       D    7     s1     s3    t1    t2
      A       E    8     s1     s4    t1    t3
      A       F    3     s1     s4    t1    t3
      A       F    2     s4     s4    t1    t3
      A       G    5     s1     s1    t1    t3"""

text2 = [line.split() for line in text.split('\n')]
df = pd.DataFrame(text2[1:], columns=text2[0])

给定这样一个数据框,我们根据研究是否相同以及城镇是否相同进行分组,然后输出每个相同研究/相同城镇组合的所有 SNP 列表:

# Creating boolean columns for grouping data
df['same_study'] = df['Study1'] == df['Study2']
df['same_town'] = df['Town1'] == df['Town2']

# Creating lists of values in each group
snps_df = df.groupby(['same_study', 'same_town'])['SNPs'].apply(lambda group_series: group_series.tolist()).reset_index()
>>> print(snps_df)

   same_study  same_town       SNPs
0       False      False  [7, 8, 3]
1       False       True        [6]
2        True      False     [2, 5]
3        True       True        [3]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-19
    • 2018-08-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多