Python 利用距离过滤数据帧

Python 利用距离过滤数据帧,python,Python,我有一个数据框,其中ID代表果蝇胚胎中的细胞,X和Y是这些细胞的坐标,mRNA是每个细胞中特定mRNA的数量 ID X Y mRNA 0 0 149.492 189.153 0 1 1 115.084 194.082 2 2 2 135.331 194.831 7 3 3 136.965 184.493 2 4 4 124.025

我有一个数据框,其中ID代表果蝇胚胎中的细胞,X和Y是这些细胞的坐标,mRNA是每个细胞中特定mRNA的数量

       ID        X        Y  mRNA
0        0  149.492  189.153     0
1        1  115.084  194.082     2
2        2  135.331  194.831     7
3        3  136.965  184.493     2
4        4  124.025  190.069     1
...    ...      ...      ...   ... 
我使用以下代码计算此矩阵的距离: (在另一个问题中,我得到了很多帮助)

这很好,但是,我真正想要的不是显示dist列,而是使用距离计算另一列,其中显示距离<10的任何细胞的mRNA值


任何帮助都将不胜感激

我无法复制您的数据,但是如果“dist”列包含您想要的内容,那么您可以过滤您的数据

像这样,

 df_1 = df_1[df_1.dist<10]
更新:
由于“dist”列本身就是列表,因此我们需要分别获取每个元素。若要获取单个元素,请说0元素(第一个):


df=df[df.b.str[0]首先考虑将列表值迁移到列中,然后将数据从宽格式迁移到长格式,以便正确比较mRNA和距离。最后过滤记录以获得所需的距离标准,将与自身相比较的零去掉:

# ... SAME AS ABOVE ...

# CREATES d0, d1, d2, d3, ... COLUMNS
dist_cols = ['d'+str(i) for i in range(len(df_1['Y']))]
df_1[dist_cols] = df_1['dist'].apply(pd.Series)

# RESHAPE DATA LONG
melted_df = df_1.melt(id_vars = ['ID', 'X', 'Y', 'mRNA'], 
                      value_vars = dist_cols, 
                      var_name = 'dist', value_name = 'dist_val')

# FILTER FOR DISTANCES (0, 10)
melted_df = melted_df[melted_df['dist_val'].between(0, 10, inclusive = False)]

您是要与
dist
还是
distance
进行比较?
dist
是一个值列表,距离看起来像一个矩阵,那么您想将10与什么进行比较?列表/矩阵的长度还是列表/矩阵中的特定值?理想情况下,我根本不想打印列dist,而是相反打印一列,列上dist<10的细胞(ID)的mRNA值。dist是一个列表,那么您将10与之进行比较是什么?列表的长度还是列表中的特定值?对于列表中小于10的每个值,我希望与之关联的mRNA值。对不起,我编辑了上述代码:df_1=df_1[df_1.dist仍然不起作用,我认为这是因为dist是一个列表类型错误:'啊,你的'dist'是每行的值列表。该列表的哪个元素是距离?你可以得到该列表的每个元素。我将在上面添加一个更新,看起来像这样的df=df[df.b.str[0]谢谢,我试过了,我得到了这个错误:value\u vars=dist\u names,name错误:name'dist\u names'没有定义,应该是这样吗?``melled\u df=df\u 1.melt(id\u vars=['id','X','Y','mRNA',value\u vars=dist\u cols,var\u name='dist',value\u name='dist val')“哎呀,对不起打错了。是的,你的更正应该行得通。
print(df_1.head())
df=df[df.b.str[0]<10] 
# ... SAME AS ABOVE ...

# CREATES d0, d1, d2, d3, ... COLUMNS
dist_cols = ['d'+str(i) for i in range(len(df_1['Y']))]
df_1[dist_cols] = df_1['dist'].apply(pd.Series)

# RESHAPE DATA LONG
melted_df = df_1.melt(id_vars = ['ID', 'X', 'Y', 'mRNA'], 
                      value_vars = dist_cols, 
                      var_name = 'dist', value_name = 'dist_val')

# FILTER FOR DISTANCES (0, 10)
melted_df = melted_df[melted_df['dist_val'].between(0, 10, inclusive = False)]