使用 spyder 从 2D 数据帧中提取并根据 2D 数据帧中的值位置将值添加到 1D 数据帧
Extracting from a 2D dataframe and adding value to 1D dataframe based on value locations in the 2D dataframe using spyder
我有两个数据框
df1 = pd.DataFrame({
1: {'A': 237, 'B': 435, 'C': 900},
2: {'A': 543, 'B': 313, 'C': 1200},
3: {'A': 300, 'B': 150, 'C': 1600},
4: {'A': 256, 'B': 635, 'C': 900},
5: {'A': 343, 'B': 847, 'C': 1200},
6: {'A': 122, 'B': 321, 'C': 1600}
})
df2 = pd.DataFrame({'well': ['A1', 'A2', 'A3', 'B1', 'B2', 'B3']})
我想创建一个新的数据框:
df3 = pd.DataFrame({
'value': {'A1': 237, 'A2': 543, 'A3': 300, 'A4': 256,
'A5': 343, 'A6': 122, 'B1': 435, 'B2': 313,
'B3': 150, 'B4': 635, 'B5': 847, 'B6': 321},
'Time': {'A1': 900, 'A2': 1200, 'A3': 1600, 'A4': 900,
'A5': 1200, 'A6': 1600, 'B1': 900, 'B2': 1200,
'B3': 1600, 'B4': 900, 'B5': 1200, 'B6': 1600}
})
我的实际数据帧比这个大,并且总是有不同的值,所以我想要一种方法来简化它,以便它可以在任何相同格式的数据帧上工作。
让我们试试T
+ melt
to go to long-form, then compressing the index with Index.map
:
df3 = (
df1.T.melt(id_vars='C', ignore_index=False) # Long Form saving C
.set_index('variable', append=True) # Add variable to the index
.rename(columns={'C': 'Time'}) # Rename C column to time
.reindex(columns=['value', 'Time']) # re-order columns
)
df3.index = df3.index.swaplevel(0, 1).map(lambda s: ''.join(map(str, s)))
df3
:
value Time
A1 237 900
A2 543 1200
A3 300 1600
A4 256 900
A5 343 1200
A6 122 1600
B1 435 900
B2 313 1200
B3 150 1600
B4 635 900
B5 847 1200
B6 321 1600
我有两个数据框
df1 = pd.DataFrame({
1: {'A': 237, 'B': 435, 'C': 900},
2: {'A': 543, 'B': 313, 'C': 1200},
3: {'A': 300, 'B': 150, 'C': 1600},
4: {'A': 256, 'B': 635, 'C': 900},
5: {'A': 343, 'B': 847, 'C': 1200},
6: {'A': 122, 'B': 321, 'C': 1600}
})
df2 = pd.DataFrame({'well': ['A1', 'A2', 'A3', 'B1', 'B2', 'B3']})
我想创建一个新的数据框:
df3 = pd.DataFrame({
'value': {'A1': 237, 'A2': 543, 'A3': 300, 'A4': 256,
'A5': 343, 'A6': 122, 'B1': 435, 'B2': 313,
'B3': 150, 'B4': 635, 'B5': 847, 'B6': 321},
'Time': {'A1': 900, 'A2': 1200, 'A3': 1600, 'A4': 900,
'A5': 1200, 'A6': 1600, 'B1': 900, 'B2': 1200,
'B3': 1600, 'B4': 900, 'B5': 1200, 'B6': 1600}
})
我的实际数据帧比这个大,并且总是有不同的值,所以我想要一种方法来简化它,以便它可以在任何相同格式的数据帧上工作。
让我们试试T
+ melt
to go to long-form, then compressing the index with Index.map
:
df3 = (
df1.T.melt(id_vars='C', ignore_index=False) # Long Form saving C
.set_index('variable', append=True) # Add variable to the index
.rename(columns={'C': 'Time'}) # Rename C column to time
.reindex(columns=['value', 'Time']) # re-order columns
)
df3.index = df3.index.swaplevel(0, 1).map(lambda s: ''.join(map(str, s)))
df3
:
value Time
A1 237 900
A2 543 1200
A3 300 1600
A4 256 900
A5 343 1200
A6 122 1600
B1 435 900
B2 313 1200
B3 150 1600
B4 635 900
B5 847 1200
B6 321 1600