使用列名称中的唯一前缀过滤数据框中的特定值(例如 'UniqueID_commonsuffix')
filter specific values in dataframe with unique prefix in column name (e.g. 'UniqueID_commonsuffix')
我有一个包含 > 300 个独特样本的数据框,每个样本有 2 列类似信息,我想在每个样本的其中一列中过滤 34 个特定值。我提供了数据的屏幕截图以帮助可视化此问题。我基本上想生成一个新的数据框,其中仅包含我指定的 34 个值的信息。如果这个问题难以理解,我深表歉意,我希望截图有助于更好地定义问题。
在此屏幕截图中,每个带有“sampleID_r.variant”的列都需要针对我在单独数据框中的特定值进行过滤。只有 34 个我感兴趣。因此,我想将相应的值存储在“sampleID_reads”列的左侧,就像字典一样。如果有人可以提供帮助,我将不胜感激。非常感谢。
编辑:
原始数据框采用以下格式:
sampleID_reads
sampleID_r.variant
1
r.79_80ins79+1_79+76
64
r.79_80ins79+10857_79+10938
53
r.79_80ins80-13725_80-13587
72
r.79_80ins80-5488_80-5435
16
r.79_80ins79+2861_79+2900
34个样本的格式如下:
r_dot
r.646_729del
r.-19_-18ins-19+428_-19+535
r.-25_-20del
r.4186_4188del
r.5333_5406del
...so on and so forth
这是一些样本数据
d = {'sample1_reads': [1, 64, 53, 72, 16],
'sample1_r.variant': ['r.79_80ins79+1_79+76', 'r.79_80ins79+10857_79+10938',
'r.79_80ins80-13725_80-13587', 'r.79_80ins80-5488_80-5435', 'r.79_80ins79+2861_79+2900'],
'sample2_reads': [0, 3, 6, 9, 11],
'sample2_r.variant': ['r.5333_5406del', 'r.4186_4188del', 'r.5333_54106del', 'r.2345_2345fad', 'r.65456_w56sjfy']}
df = pd.DataFrame(d)
rdot = pd.DataFrame(['r.79_80ins79+1_79+76', 'r.646_729del', 'r.5333_5406del', 'r.79_80ins80-5488_80-5435', 'r.79_80ins79+2861_79+2900'], columns=['r_dot'])
如果您只想根据第二帧筛选第一帧,那么您可以执行以下操作
# reshape your current data frame
new_df = pd.DataFrame(df.values.reshape((-1,2)), columns=['reads', 'variant'])
# use boolean indexing to filter your new data frame
df_f = new_df[new_df['variant'].isin(rdot['r_dot'])]
reads variant
0 1 r.79_80ins79+1_79+76
1 0 r.5333_5406del
6 72 r.79_80ins80-5488_80-5435
8 16 r.79_80ins79+2861_79+2900
我有一个包含 > 300 个独特样本的数据框,每个样本有 2 列类似信息,我想在每个样本的其中一列中过滤 34 个特定值。我提供了数据的屏幕截图以帮助可视化此问题。我基本上想生成一个新的数据框,其中仅包含我指定的 34 个值的信息。如果这个问题难以理解,我深表歉意,我希望截图有助于更好地定义问题。
在此屏幕截图中,每个带有“sampleID_r.variant”的列都需要针对我在单独数据框中的特定值进行过滤。只有 34 个我感兴趣。因此,我想将相应的值存储在“sampleID_reads”列的左侧,就像字典一样。如果有人可以提供帮助,我将不胜感激。非常感谢。
编辑: 原始数据框采用以下格式:
sampleID_reads | sampleID_r.variant |
---|---|
1 | r.79_80ins79+1_79+76 |
64 | r.79_80ins79+10857_79+10938 |
53 | r.79_80ins80-13725_80-13587 |
72 | r.79_80ins80-5488_80-5435 |
16 | r.79_80ins79+2861_79+2900 |
34个样本的格式如下:
r_dot |
---|
r.646_729del |
r.-19_-18ins-19+428_-19+535 |
r.-25_-20del |
r.4186_4188del |
r.5333_5406del |
...so on and so forth |
这是一些样本数据
d = {'sample1_reads': [1, 64, 53, 72, 16],
'sample1_r.variant': ['r.79_80ins79+1_79+76', 'r.79_80ins79+10857_79+10938',
'r.79_80ins80-13725_80-13587', 'r.79_80ins80-5488_80-5435', 'r.79_80ins79+2861_79+2900'],
'sample2_reads': [0, 3, 6, 9, 11],
'sample2_r.variant': ['r.5333_5406del', 'r.4186_4188del', 'r.5333_54106del', 'r.2345_2345fad', 'r.65456_w56sjfy']}
df = pd.DataFrame(d)
rdot = pd.DataFrame(['r.79_80ins79+1_79+76', 'r.646_729del', 'r.5333_5406del', 'r.79_80ins80-5488_80-5435', 'r.79_80ins79+2861_79+2900'], columns=['r_dot'])
如果您只想根据第二帧筛选第一帧,那么您可以执行以下操作
# reshape your current data frame
new_df = pd.DataFrame(df.values.reshape((-1,2)), columns=['reads', 'variant'])
# use boolean indexing to filter your new data frame
df_f = new_df[new_df['variant'].isin(rdot['r_dot'])]
reads variant
0 1 r.79_80ins79+1_79+76
1 0 r.5333_5406del
6 72 r.79_80ins80-5488_80-5435
8 16 r.79_80ins79+2861_79+2900