如何将一个df的列名索引到另一个df系列?

时间:2020-09-12 22:31:19

标签: python pandas dataframe multi-index

我有2个数据帧,一个带有原始数据(df),另一个带有描述什么井位的模板。如何使用连续的模板列well_id'A1'索引df中的列名'A1',以获得样本名称?

这是原始数据的导出方式,因此我尝试在不更改输入的情况下不进行创建。

最终目标是在绘制df数据时使用特定样品的“名称”模板。

我的示例现在显示我正在使用整个“名称”列(这是错误的),而不仅仅是每个样本的正确名称。

import pandas as pd
import re
import matplotlib.pyplot as plt 

df = pd.DataFrame({'time': [0.1, 0.2, 0.3], 
                    'A1': [1000, 2000, 3000], 
                    'A12': [1500, 2000, 3000], 
                    'B1': [4500, 5000, 6000], 
                    'B12': [4000, 5000, 6000]})

template = pd.DataFrame({'well_id': ['A1', 'A12', 'B1', 'B12'],
                         'name': ['Sample1', 'Sample2', 'Sample3', 'Sample4']})

plt.plot(df.time, df.iloc[:,1:], label=template['name']) 
plt.legend()

所以我从df中隔离了well_id,但是不确定现在如何将它们与模板结合。

well_id = list(filter(re.compile('[A-H][1-9]$|[A-H][1][0-2]$').match, df.columns))

1 个答案:

答案 0 :(得分:1)

说,您希望针对每个给定值汇总所有样本名称,可以先合并数据框,然后对groupby进行name。例如,使用此方法,您可以针对这样的每个名称计算均值,然后可以将其用于进一步绘制:

import pandas as pd
import re
import matplotlib.pyplot as plt 

df = pd.DataFrame({'time': [0.1, 0.2, 0.3], 
                    'A1': [1000, 2000, 3000], 
                    'A12': [1500, 2000, 3000], 
                    'B1': [4500, 5000, 6000], 
                    'B12': [4000, 5000, 6000]})

template = pd.DataFrame({'well_id': ['A1', 'A12', 'B1', 'B12'],
                         'name': ['Sample1', 'Sample2', 'Sample3', 'Sample4']})

df1 = pd.merge(template, df.T, how='left', left_on='well_id', right_index=True)
df1.columns = ['well_id', 'name', 'val_1', 'val_2', 'val_3']
print(df1.head())

df1.head()的输出如下:

  well_id     name   val_1   val_2   val_3
0      A1  Sample1  1000.0  2000.0  3000.0
1     A12  Sample2  1500.0  2000.0  3000.0
2      B1  Sample3  4500.0  5000.0  6000.0
3     B12  Sample4  4000.0  5000.0  6000.0

拥有df1后,您可以汇总数据并按以下方式绘制数据:

df1.groupby('name').mean().plot.line()
plt.title("Values Grouped on Sample Names", size=20)
plt.show()

Plot of Values Grouped on Sample Names