pandas 将 Dataframe 的列拉入单独的 Dataframe ,然后用平均值替换重复项

5fjcxozz  于 2023-02-14  发布在  其他
关注(0)|答案(1)|浏览(75)

我是python的新手,所以如果这个问题看起来很初级的话,我先道歉。我正在尝试把一个 Dataframe 的列拉到另一个 Dataframe 中。我想用一个包含平均值的列替换第一个 Dataframe 中的重复列,并放到第二个 Dataframe 中。我希望这是有意义的!
为了提供一些背景知识,我正在跟踪某些时间点的基因表达。我有一个17行x33列的数据框。这个数据框中的每一行对应一个特定的外显子。这个数据框中的每一列对应一个时间点(AGE)。
Dataframe 如下所示:x1c 0d1x
其中一些列包含相同的名称(年龄),我只想计算具有相同名称的列的平均值,这样,例如,我得到一列“12 pcw”,而不是三个单独的列“12 pcw”。之后,我希望将这些值从第一个 Dataframe 拉到第二个 Dataframe 中,以获得平均值。
我希望使用一个for循环来循环遍历每个age(列),以获得所有主题的平均表达式。
我将在下面解释我的过程:

1)从年龄列表中获取UNIQUE字符串名称列表

unique_ages = set(column_names)

2)创建一个空的数据框,给出我希望平均数据适合/放入的内容的轮廓

mean_df = pd.DataFrame(index=exons, columns=unique_ages)

3)现在,我想循环遍历每个年龄段,以获得当前献血者的平均表达,这就是我尝试利用***for循环***创建一个管道来处理其他 Dataframe ,我将在未来使用这些 Dataframe 。

for age in unique_ages:
    print(age)
    age_df = pd.DataFrame() ##pull columns of df as separate df that have this string 
    if len(age_df.columns) > 1: ##check if df has >1 SAME column, if so, take avg across SAME columns 
        mean = df.mean(axis=1)
        mean_df[age] = mean
    else:
        ## just pull out the values and put them into your temp_df

4)现在,使用新的平均数组(如果不存在多个年龄,则为同一阵列),我想把这个数组放到我的'temp_df'中适当的列下。我知道我应该使用for循环提供的'age'变量来获取我的temp df中的列的适当的locationname。但是我不确定如何做到这一点。这是一个相当陡峭的学习曲线,我觉得这是一个简单的解决方案,但我似乎不能包裹我的头周围。任何帮助将不胜感激。

fnvucqvd

fnvucqvd1#

不需要for loop(Pandas:)),你可以直接使用df.groupby(lambda x:x, axis=1).mean(),例如:

data = [[1,2,3],[4,5,6]]
cols = ['col1', 'col2', 'col2']
df = pd.DataFrame(data=data, columns=cols)

#    col1  col2  col2
# 0     1     2     3
# 1     4     5     6

df = df.groupby(lambda x:x, axis=1).mean()

#    col1  col2
# 0   1.0   2.5
# 1   4.0   5.5

groupby函数采用另一个函数(lambda),这基本上意味着它将插入每个列名,并返回该列所属的组。在我们的示例中,我们只希望列名本身就是组。因此,在名为col2的第三列上,它会说'this column belong to group named col2 ',而这个组已经存在(因为第二列已经在前面传递过了),然后提供所需的聚合,在本例中是mean()

相关问题