python - 从具有不同索引的其他数据帧值创建多索引数据帧
问题描述
我有一个由多个文件组成的数据框(dfA)。dfA 包含三件事,一个与 dfA 中其他日期值匹配的日期值,一个来自未知数量名称列表的名称,该名称将与 dfA 中的其他名称相同,以及一个唯一的浓度值。我想创建一个新的数据框(dfB),其中行按日期多索引,列是名称,值是所述名称值的浓度。我尝试使用以下代码执行此操作:
for name in nameList:
dfB[str(name)] = dfA[dfA['Sample Name'] == str(name)]['Calculated Concentration']
但是,我返回一个数据框,其中仅填充了第一行,我认为这是由于索引值与其他列值的索引值不同:
'5/0.5 uM' '10/1 uM' '15/1.5 uM'
083021 14 4.7886 NaN NaN
15 4.5374 NaN NaN
...
090721 14 5.2840 NaN NaN
15 5.3050 NaN NaN
...
083121 57 5.2132 NaN NaN
58 4.8929 NaN NaN
...
在上面的输出中,最左边的列是按日期排列的值的多索引列。下一列包含原始 dfA 的索引。然后“5/0.5 uM”是“名称列表”中的值,其中包含从原始 dfA 中找到的值,“样本名称”为“5/0.5 uM”。
如何在其他列具有正确值的情况下创建 dfB,或者从 dfA 更改索引值,它们将与每列匹配?
解决方案
您可能会发现将日期重新格式化为日期时间变量而不是字符串更容易。话虽如此,设置测试:
dfA = pd.DataFrame({
"date":["090721","083021","090721","083021","083121","083021","083121","083021","083121","083121"],
"name":["15/1.5 uM","15/1.5 uM","15/1.5 uM","15/1.5 uM","5/0.5 uM","5/0.5 uM","15/1.5 uM","5/0.5 uM","10/1 uM","10/1 uM"],
"concentration":[0.430896003263987,0.354506173988912,0.679630142573769,0.816498937365697,0.134105578748551,0.364977945903234,0.602557291467607,0.633223692609049,2.59697726598929E-02,0.206455687221982]
})
dfA["index"] = dfA.index # copy index over to a column called index, for reasons that will be clearer soon.
dfA
请注意,(日期,名称)的每个组合不一定有一行。要获得您所描述的内容:
pd.pivot_table(dfA, values="concentration", index=["date", "index"], columns=["name"],aggfunc=np.mean)
输出:
你可以看到有NaN
s。这些对应于前面描述的起始数据帧中的“间隙”。请注意,我们使用了聚合函数 ,np.mean
但这没有任何区别,因为我们选择了重新索引,这样每一行中只有一个集中值来“聚合”。
您没有要求这样做,但您可能还会发现取具有相同日期和名称的行的平均值很有用?只需从多索引规范中删除“索引”:
pd.pivot_table(dfA, values="concentration", index=["date"], columns=["name"],aggfunc=np.mean)
输出:
推荐阅读
- python-3.x - 为什么 .count() 不能正确识别给定字符串中有多少个“)”?
- deep-learning - 使用强化学习的多智能体连续空间寻路的最佳算法
- rest - 如何使用 WSDL soap 或 Rest 控制 Onvif 上 ip-camera 的曝光
- csv - 如果可能,需要满足哪些条件才能在 NetSuite 中为单位置 Bin Transfer 执行 CSV 导入?
- azure - Azure Function v2 谷歌身份验证与谷歌
- php - Laravel ViewServiceProvide 不接受多个视图
- c# - Azure 计时器功能抱怨不返回任务
- python - 如何有效地从 Redshift 中删除数据?
- neo4j - 在损坏之前,“(node)-[r:player*]->()”查询工作正常,但在导入损坏的修复数据后就不行了
- ios - xcode - 资产目录 - 图像类型 - 相同的比例 - 不同的分辨率