在python中从2D df中提取并向1D df添加值



我正试图从一个2d数据帧中提取信息,其中我有行a到H和列1-12。每个单元格都有不同的编号。我的第二个数据帧只有一列包含组合信息,例如A1、A2等。我想设置一个for循环,这样我就可以执行df1.iloc并选择坐标。但我不想键入96行,所以我认为for循环会很有帮助,但我不知道该怎么做。我是个新手,所以我不太懂窍门。

df1将是:

256122>>
1 2 3 4 5 6
A 237 543 300343
B 435313150635847321

一个选项是从well:到stackdf1reindex

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']})

解释:

  1. 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

  1. 使用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

  1. df2reindex抓取well
df3 = df3.reindex(df2['well'])
Well
A1    237
A2    543
A3    300
B1    435
B2    313
B3    150
dtype: int64

*如果油井是出现在OP中的list,则将其转换为名称为wellreindexSeries

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')

  1. 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

最新更新