我有以下内容:
dictionary = {'col1': ["England", "USA","Germany","Canada","Cuba","Vietnam"], 'col2':
["France", "Spain","Italy","Jamaica","Bulgaria","South Korea"],
"rating":[2,4,-5,2,1,2],"value":[1,1,2,2,3,3]}
table=pd.DataFrame(dictionary)
这将导致以下输出:
col1 col2 rating value
0 England France 2 1
1 USA Spain 4 1
2 Germany Italy -5 2
3 Canada Jamaica 2 2
4 Cuba Bulgaria 1 3
5 Vietnam South Korea 2 3
我分别列出了三个系列。
list([pd.Series([50,2],["const","Match Rating"]),
pd.Series([48,2],["const","Match Rating"]),
pd.Series([47,2.5],["const","Match Rating"])])
看起来像这样
[const 50
Match Rating 2
dtype: int64,
const 48
Match Rating 2
dtype: int64,
const 47
Match Rating 2.5
dtype: int64]
我想在数据框中创建一个称为“结果”的列,其中应用了公式。 Rating (from the dataframe) * match rating (from the list) + const (from the list)
当数据帧中的“值”为1时,应应用列表中的第一组元素,即50和2。当数据帧中的“值”为2时,应应用第二组元素,即48和2,依此类推。
所需的结果是这样的:
col1 col2 rating value result
England France 2 1 54
USA Spain 4 1 58
Germany Italy -5 2 38
Canada Jamaica 2 2 52
Cuba Bulgaria 1 3 49.5
Vietnam South Korea 2 3 52
预先感谢
答案 0 :(得分:3)
以下是在<h1>Show/Hide Test</h1>
<div class="parent">
<div class="drawer">
<div class="accordion" id="accordion">
<button class="show-hide-toggle" id="show-hide-toggle">Show/Hide</button>
<div class="show-hide-content" id="show-hide-content" tabindex="-1">
<p>This is some content that should be shown or hidden depending on the toggle.</p>
</div>
</div>
<div class="spacer">
</div>
</div>
</div>
之后使用merge
的一种解决方案
concat
答案 1 :(得分:1)
您可以使用assign
+ merge
来实现。
table.assign(val2 = table['value'] - 1)
.merge(lookup.reset_index(), left_on='val2', right_on='index', how='left')
.assign(result = lambda x: x['rating'].mul(x['Match Rating']).add(x['const']))
[['col1', 'col2', 'rating', 'value', 'result']]
输出:
col1 col2 rating value result
0 England France 2 1 54.0
1 USA Spain 4 1 58.0
2 Germany Italy -5 2 38.0
3 Canada Jamaica 2 2 52.0
4 Cuba Bulgaria 1 3 49.5
5 Vietnam South Korea 2 3 52.0
lookup
DataFrame不在问题列表中。
lookup = pd.DataFrame(list([pd.Series([50,2],["const","Match Rating"]),
pd.Series([48,2],["const","Match Rating"]),
pd.Series([47,2.5],["const","Match Rating"])]))
答案 2 :(得分:1)
您可以使用列表中的自定义词典以及map
和str
访问器来进行计算:
l = [pd.Series([50,2],["const","Match Rating"]),
pd.Series([48,2],["const","Match Rating"]),
pd.Series([47,2.5],["const","Match Rating"])]
d = {i: s.to_dict() for i, s in enumerate(l, 1)}
s = table.value.map(d)
table['result'] = table.rating * s.str['Match Rating'] + s.str['const']
Out[811]:
col1 col2 rating value result
0 England France 2 1 54.0
1 USA Spain 4 1 58.0
2 Germany Italy -5 2 38.0
3 Canada Jamaica 2 2 52.0
4 Cuba Bulgaria 1 3 49.5
5 Vietnam South Korea 2 3 52.0