首先,如果标题很难理解,我很抱歉。
目标:我尝试按source, type
列分组,按结果为每个组添加min,max
列,然后将相关的target
列添加到min
和max
列(在值前面)。
我不知道如何获得这种格式的Pandas结果:
| 源|类型|最小值|最大值|
| - ------|- ------|- ------|- ------|
| 人员1|弓|第二个人:0.001|第三个人:0.05|
我有一个字典清单如下:
`[{'source': 'Person1', 'target': 'Person2', 'type': 'bow', 'similarity': 0.636}, {'source': 'Person1', 'target': 'Person2', 'type': 'bigram', 'similarity': 0.040}, {'source': 'Person1', 'target': 'Person2', 'type': 'tfidf', 'similarity': 0.433}, {'source': 'Person1', 'target': 'Person3', 'type': 'bow', 'similarity': 0.699}, {'source': 'Person1', 'target': 'Person3', 'type': 'bigram', 'similarity': 0.171}, {'source': 'Person1', 'target': 'Person3', 'type': 'tfidf', 'similarity': 0.522}]`
在该表中,如下所示:
| 源|靶|类型|相似性|
| - ------|- ------|- ------|- ------|
| 人员1|人员2|弓|0.636|
| 人员1|人员2|双字母组|0.040|
| 人员1|人员2|特菲德夫|0.433|
| 人员1|人员3|弓|0.699|
| 人员1|人员3|双字母组|零点一七一|
| 人员1|人员3|特菲德夫|零点五二二|
对于group by,min/max,我使用以下公式:
df = df.groupby(['source','type']).similarity.agg(['min','max'])
其结果是:
| 源|类型|最小值|最大值|
| - ------|- ------|- ------|- ------|
| 人员1|弓|0.636| 0.699|
| 人员1|双字母组|0.040|零点一七一|
| 人员1|特菲德夫|0.433|零点五二二|
到目前为止一切都很好,但我如何将输出转换为以下结构:
[资料来源]:资料来源;[类型]:类型;[min]:目标值:min(相似性);[最大值]:目标值:最大值(相似度)
| 源|类型|最小值|最大值|
| - ------|- ------|- ------|- ----------------------------------------------------|
| 人员1|弓|受试者2:0.636|受试者3:0.699|
| 人员1|双字母组|受试者2:0.040|受试者3:0.171|
| 人员1|特菲德夫|受试者3:0.433|受试者3:0.522|
我是否应该使用.loc来查找最小值/最大值所在的行,然后以某种方式将这些值添加到结果中?
2条答案
按热度按时间jecbmhm31#
下面是使用
GroupBy
和pandas.merge
的方法:另一种变体:
#输出:
zdwk9cvp2#
示例
df
进程
结果:
使结果到你想要的输出
将
:
加到df的目标列的值上,将result的值改为str,然后将它们组合起来。完整代码和输出
输出: