我有两个数据框,想要在数据框内进行一些计算。但是我无法获得想要的结果。请检查我的脚本。
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时,我得到了:
报价单
0 0.1
1 0.2
2 3.3
Name: A, dtype: float64
报价单
实际上,我希望df1列A中带有C列的每个数据都是“ k”,加上df2列A中带有C列的最后一个数据是“ k”。但是,现在只有df1列A中的最后一个数据进行了加法,而列B和C消失了。
谁知道如何实现我的目标?谢谢!
答案 0 :(得分:1)
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
答案 1 :(得分:1)
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列保存在单独的数据帧( eg 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
答案 2 :(得分:0)
不清楚您的目标。我的理解是,您要计算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