两个数据帧的计算

2024-03-29 11:40:42 发布

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

我有两个数据帧,想在数据帧内做一些计算。但我不能得到我想要的结果。请检查我的剧本。你知道吗

import pandas as pd

df1 = pd.DataFrame({'A': [0.1,0.2,0.3,0.1,0.2,0.3], 'B': [7,8,9,10,11,12], 'C': ['k','k','k','j','j','j']})
df2 = pd.DataFrame({'A': [1,2,3,1,2,3], 'B': [1,2,3,4,5,6], 'C': ['k','k','k','j','j','j']})

df3=df1[df1['C']=='k']['A'].add(df2[df2['C']=='k']['A'][-1:], fill_value=0)

当我检查df3时,我得到:

Block quote

0 0.1
1 0.2
2 3.3
Name: A, dtype: float64

Block quote

实际上,我希望df1列A和列C中的每个数据都是“k”,加上df2列A和列C中的最后一个数据是“k”。然而,现在只有df1列A中的最后一个数据进行了加法,列B和C消失了。你知道吗

有谁知道如何实现我的目标?谢谢!你知道吗


Tags: 数据importadddataframepandasvalueasblock
3条回答
import pandas as pd 

df1 = pd.DataFrame({'A': [0.1,0.2,0.3,0.1,0.2,0.3], 'B': [7,8,9,10,11,12], 'C': ['k','k','k','j','j','j']})
df2 = pd.DataFrame({'A': [1,2,3,1,2,3], 'B': [1,2,3,4,5,6], 'C': ['k','k','k','j','j','j']})

df1 = df1[df1.C == 'k'].A
df2 = df2[df2.C == 'k'].A
df1.add(df2)

上述代码导致:

0    1.1
1    2.2
2    3.3
Name: A, dtype: float64

pd.concat([df1[df1['C']=='k']['A'], df2[df2['C']=='k']['A']])

The above line results in

0    0.1
1    0.2
2    0.3
0    1.0
1    2.0
2    3.0

df3 = df1[df1['C']=='k']['A']+df2[df2['C']=='k']['A'].iloc[-1:].iloc[0]

收益率:

0    3.1
1    3.2
2    3.3

在上面的代码中,我提取了df2[df2['C']=='k']['A']中的最后一个值,即3.0,并将其添加到df1[df1['C']=='k']['A']中的所有行中

[编辑]要回答下面评论部分的问题,您可以将df1中的B和C列保存在单独的数据帧中(例如df4),然后将它们与df3连接起来:

df4 = df1[df1['C']=='k'][['B','C']]
df5 = pd.concat([df3,df4],axis=1)

由此产生:

     A  B  C
0  3.1  7  k
1  3.2  8  k
2  3.3  9  k

然后,可以将得到的df5数据帧与包含df1行的数据帧连接起来,其中C列中的值不等于k:

df6 = df1[df1['C']!='k']
df7 = pd.concat([df5,df6])

由此产生:

     A   B  C
0  3.1   7  k
1  3.2   8  k
2  3.3   9  k
3  0.1  10  j
4  0.2  11  j
5  0.3  12  j

不清楚你的目标。我的理解是,您需要计算df1列A中的值和df2列A中的值,这两列中的值与C列中的k位于同一位置

df3=(df1[df1['C']=='k']['A']) + (df2[df2['C']=='k']['A'])

Output:
0    1.1
1    2.2
2    3.3
Name: A, dtype: float64

相关问题 更多 >