python - 从 2D df 中提取并在 python 中将值添加到 1D df
问题描述
我正在尝试从二维数据框中提取信息,其中我有 A 到 H 行和 1-12 列。每个单元格都有不同的编号。我的第二个数据框只有一列包含组合信息,例如 A1、A2 等。我想设置一个 for 循环,以便我可以执行 df1.iloc 并选择坐标。但我不想输入 96 行,所以我认为 for 循环会有所帮助,但我不知道该怎么做。我很新,所以我不太了解这些技巧。
df1 将是:
1 | 2 | 3 | 4 | 5 | 6 | |
---|---|---|---|---|---|---|
一种 | 237 | 543 | 300 | 256 | 343 | 122 |
乙 | 435 | 313 | 150 | 635 | 847 | 321 |
df2 将是:
well=['A1','A2','A3','B1','B2','B3']
我想做一个看起来像这样的df3:
好 | 价值 |
---|---|
A1 | 237 |
A2 | 543 |
A3 | 300 |
B1 | 435 |
B2 | 313 |
B3 | 150 |
到目前为止,我所拥有的是:
df3=pd.DataFrame()
for i in df2:
if i.contains('A'):
row=df1.iloc[1]
if i.contains('1'):
value=row.iloc[1]
df3.append(i,value)
我知道 col # 对于 iloc 将始终相同。那么我可以将 AH 分配为 1-8,然后以某种方式选择 df2 中字母后面的数字作为 iloc 值吗?
解决方案
df3 = df1.stack()
df3.index = df3.index.map(lambda s: ''.join(map(str, s)))
df3 = df3.reindex(df2['well']).reset_index(name='Value')
df3
:
Well Value
0 A1 237
1 A2 543
2 A3 300
3 B1 435
4 B2 313
5 B3 150
使用的数据框:
import pandas as pd
df1 = pd.DataFrame({
1: {'A': 237, 'B': 435}, 2: {'A': 543, 'B': 313},
3: {'A': 300, 'B': 150}, 4: {'A': 256, 'B': 635},
5: {'A': 343, 'B': 847}, 6: {'A': 122, 'B': 321}
})
df2 = pd.DataFrame({'well': ['A1', 'A2', 'A3', 'B1', 'B2', 'B3']})
说明:
- Stack 产生一个系列:
df3 = df1.stack()
df3
:
A 1 237
2 543
3 300
4 256
5 343
6 122
B 1 435
2 313
3 150
4 635
5 847
6 321
dtype: int64
- 将 MultiIndex 折叠成单个索引
Index.map
:
df3.index = df3.index.map(lambda s: ''.join(map(str, s)))
df3
:
A1 237
A2 543
A3 300
A4 256
A5 343
A6 122
B1 435
B2 313
B3 150
B4 635
B5 847
B6 321
dtype: int64
well
从df2
和抓取reindex
:
df3 = df3.reindex(df2['well'])
Well
A1 237
A2 543
A3 300
B1 435
B2 313
B3 150
dtype: int64
*如果 well 是list
OP 中出现的 a ,则将其转换为Series
带有名称的 a ,well
然后reindex
改为:
well = ['A1', 'A2', 'A3', 'B1', 'B2', 'B3']
df3 = df3.reindex(pd.Series(well, name='well'))
或者reindex
直接从,list
但是在重置索引之前需要重命名轴:
well = ['A1', 'A2', 'A3', 'B1', 'B2', 'B3']
df3 = df3.reindex(well).rename_axis(index='Well')
reset_index
转换为 DataFrame(并为Value
列命名):
df3 = df3.reindex(df2['well']).reset_index(name='Value')
df3
:
Well Value
0 A1 237
1 A2 543
2 A3 300
3 B1 435
4 B2 313
5 B3 150
推荐阅读
- amazon-web-services - AWS CloudFormation 根据环境设置 EFS ThroughputMode 和 ProvisionedThroughputInMibps 问题
- flutter - 在颤动中缓存“FileImage”
- r - Sum 不计算 dplyr 中带有 summarise 的某些字符向量
- scala - toMap 的隐式转换器
- python - 你能让乌龟成为python的圆心吗?
- vaadin-flow - 不使用自定义主题时,如何在 Vaadin 14.7.x 中启用徽章 CSS 类?
- java - 如何避免或优化大型数据集的重复反序列化?
- vue.js - Nuxt:使用多个参数进行动态路由
- python - subprocess.run() 在第二次迭代中失败
- java - 为什么 GridView 出现空白?