Python 基于另一个数据帧的数据帧中 return 元素值的代码
Python code to return element value in dataframe based on another dataframe
我有一个与此类似的数据集,它是从一个包含年度数据的文件生成的
d1 = pd.DataFrame({'category': ['A', 'B', 'C', 'D', 'E', 'F'],
'col': ['20%', '40%', '80%', '40%', '60%', '20%']})
此外,与此类似的数据集是使用另一个每月的数据集生成的
d2 = pd.DataFrame({'category': ['A', 'B', 'C', 'D', 'E', 'F'],
'20%': ['2.1', '4.1', '6.8', '5.9', '3.4', '5.4'],
'40%': ['1.9', '3.7', '6.1', '4.8', '4.1', '7.2'],
'60%': ['3.1', '4.9', '6.5', '7.1', '7.9', '5.1'],
'80%': ['2.5', '4.5', '5.6', '6.9', '8.4', '7.4']})
我希望得到这样的输出,其中 returns d2 中的元素值基于 d1 中的两列
op = pd.DataFrame({'category': ['A', 'B', 'C', 'D', 'E', 'F'],
'col': ['20%', '40%', '80%', '40%', '60%', '20%'],
'min_value': ['2.1', '3.7', '5.6', '4.8', '7.9', '5.4']})
我不确定如何查找值
使用DataFrame.melt
for unpivot and then left join in DataFrame.merge
:
df = d1.merge(d2.melt('category', value_name='min_value', var_name='col'), how='left')
print (df)
category col min_value
0 A 20% 2.1
1 B 40% 3.7
2 C 80% 5.6
3 D 40% 4.8
4 E 60% 7.9
5 F 20% 5.4
替代 DataFrame.join
and DataFrame.stack
:
df = d1.join(d2.set_index('category').stack().rename('min_value'), on=['category','col'])
我有一个与此类似的数据集,它是从一个包含年度数据的文件生成的
d1 = pd.DataFrame({'category': ['A', 'B', 'C', 'D', 'E', 'F'],
'col': ['20%', '40%', '80%', '40%', '60%', '20%']})
此外,与此类似的数据集是使用另一个每月的数据集生成的
d2 = pd.DataFrame({'category': ['A', 'B', 'C', 'D', 'E', 'F'],
'20%': ['2.1', '4.1', '6.8', '5.9', '3.4', '5.4'],
'40%': ['1.9', '3.7', '6.1', '4.8', '4.1', '7.2'],
'60%': ['3.1', '4.9', '6.5', '7.1', '7.9', '5.1'],
'80%': ['2.5', '4.5', '5.6', '6.9', '8.4', '7.4']})
我希望得到这样的输出,其中 returns d2 中的元素值基于 d1 中的两列
op = pd.DataFrame({'category': ['A', 'B', 'C', 'D', 'E', 'F'],
'col': ['20%', '40%', '80%', '40%', '60%', '20%'],
'min_value': ['2.1', '3.7', '5.6', '4.8', '7.9', '5.4']})
我不确定如何查找值
使用DataFrame.melt
for unpivot and then left join in DataFrame.merge
:
df = d1.merge(d2.melt('category', value_name='min_value', var_name='col'), how='left')
print (df)
category col min_value
0 A 20% 2.1
1 B 40% 3.7
2 C 80% 5.6
3 D 40% 4.8
4 E 60% 7.9
5 F 20% 5.4
替代 DataFrame.join
and DataFrame.stack
:
df = d1.join(d2.set_index('category').stack().rename('min_value'), on=['category','col'])