我有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))
答案 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()