在多个词典中使用不同列的减法

2024-10-01 13:34:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个dict,一个有三列(A),另一个有六列(B),我希望能够使用第一列中的值(索引对于1-4都是常量)和第二列(1-2000)中的值来指定第三列中用于减法的正确元素。第二个dict的相似之处在于,第一列和第二列用于查找正确的行,但是减法需要该行第六列中的值。你知道吗

A                                   B
1  1  260   541                     1  1  260   280   0.001  521.4
1  1  390   1195                    1  1  390   900   0.02   963.3
1  1  102   6                       1  1  102   2     0.01   4.8
2  1  65    12                      2  1  65    9     0.13   13.1
2  1  515   659                     2  1  515   356   0.002  532.2
2  1  354   1200                    2  1  354   1087  0.119  1502.3
3  1  1190  53                      3  1  1190  46    0.058  12.0
3  1  1985  3                       3  1  1985  1     0.006  1.02
3  1  457   192                     3  1  25    3     0.001  178.2
4  1  261   2084                    4  1  261   1792  0.196  100.7
4  1  12    0                       4  1  12    0     0.000  12.6
4  1  1756  30                      4  1  1756  28    0.006  23.7
4  1  592   354                     4  1  592   291   0.357  251.9

基本上我想从A的最后一列中减去B的最后一列,同时保留第一列和第二列中的信息。你知道吗

C         (desired output)                       
1  1  260   19.6
1  1  390   231.7
1  1  102   1.2
2  1  65    -1.1
2  1  515   126.8
2  1  354   -302.3
3  1  1190  41.0
3  1  1985  1.98
3  1  457   13.8
4  1  261   1983.3
4  1  12    -12.6
4  1  1756  6.3
4  1  592   102.1

我已经为此寻找了几个小时的解决方案,但还没有找到解决方案,但我相信这一定是可能的。 我需要能够创建一个散点图之后,以及在任何人有任何关于如何绘制正值和忽略负值的建议。你知道吗

编辑: 我在下面添加了代码以使其更清晰,我接收了一个三列csv文件,然后需要获得第三列中每个值的频率计数,当它们在第一列中具有相同的值时。然后B进行进一步的改变以得到所需的数据流,然后需要进行减法。在一些评论中,它提到第1列和第2列是不必要的,但第3列中的值与第1列中的值相关联,因此必须始终保持在同一行中。 作为pd导入 将numpy作为np导入

def ba(fn, float1, float2):
    ba=pd.read_csv(fn,header=None, skipfooter=6, engine='python')
    ba['col4']=ba.groupby(['col1','col3']).transform(np.size)
    ba['col5']=ba['col4'].apply(lambda x: x/float(float2)) 
    ba['col6']=ba['col5'].apply(lambda x: x*float1)
    ba=ba.set_index('col1')
    ba = dict(tuple(ba.groupby('col1')))
    return ba

Tags: csvlambdanp解决方案dictcol1fnpd
1条回答
网友
1楼 · 发布于 2024-10-01 13:34:09

IIUIC、AB是数据帧

In [1062]: A.iloc[:, :3].assign(output=A.iloc[:, -1] - B.iloc[:, -1])
Out[1062]:
    0  1     2   output
0   1  1   260    19.60
1   1  1   390   231.70
2   1  1   102     1.20
3   2  1    65    -1.10
4   2  1   515   126.80
5   2  1   354  -302.30
6   3  1  1190    41.00
7   3  1  1985     1.98
8   3  1   457    13.80
9   4  1   261  1983.30
10  4  1    12   -12.60
11  4  1  1756     6.30
12  4  1   592   102.10

详细信息

In [1063]: A
Out[1063]:
    0  1     2     3
0   1  1   260   541
1   1  1   390  1195
2   1  1   102     6
3   2  1    65    12
4   2  1   515   659
5   2  1   354  1200
6   3  1  1190    53
7   3  1  1985     3
8   3  1   457   192
9   4  1   261  2084
10  4  1    12     0
11  4  1  1756    30
12  4  1   592   354

In [1064]: B
Out[1064]:
    0  1     2     3      4        5
0   1  1   260   280  0.001   521.40
1   1  1   390   900  0.020   963.30
2   1  1   102     2  0.010     4.80
3   2  1    65     9  0.130    13.10
4   2  1   515   356  0.002   532.20
5   2  1   354  1087  0.119  1502.30
6   3  1  1190    46  0.058    12.00
7   3  1  1985     1  0.006     1.02
8   3  1    25     3  0.001   178.20
9   4  1   261  1792  0.196   100.70
10  4  1    12     0  0.000    12.60
11  4  1  1756    28  0.006    23.70
12  4  1   592   291  0.357   251.90

相关问题 更多 >