从pandas df中的特定值返回序列

时间:2019-05-28 08:56:08

标签: python pandas dataframe

我试图返回一个包含来自熊猫df中特定值的加法运算的序列。具体来说,下面的df。我想将所有X's与所有Y's添加在一起。这些不是按任何特定顺序排列的。

import pandas as pd

d = ({
    'Item' : ['X','Y','Z','X','Z','Y','Z'],                                     
    'Value' : [10,11,20,21,10,30,31],                                     
     })

df = pd.DataFrame(data=d)

Xs = df.loc[df['Item'] == 'X', 'Value']
Ys = df.loc[df['Item'] == 'Y', 'Value']

Out = Xs + Ys

预期输出:

21
51

2 个答案:

答案 0 :(得分:1)

这里的问题是不同的索引,因此Series.reset_indexdrop=True需要相同的索引:

Out = Xs.reset_index(drop=True) + Ys.reset_index(drop=True)
print (Out)
0    21
1    51
Name: Value, dtype: int64

或者,如果可能,使用不同的Series长度,请使用Series.add

Out = Xs.reset_index(drop=True).add(Ys.reset_index(drop=True), fill_value=0)

或者如果总长度为Series的总长度为1d numpy数组,则为:

Out = pd.Series(Xs.values + Ys.values)
print (Out)
0    21
1    51
dtype: int64

答案 1 :(得分:1)

我更喜欢@jezrael的答案,但我想分享我的想法。

Xs = df.loc[df['Item'] == 'X', 'Value'].tolist()
Ys = df.loc[df['Item'] == 'Y', 'Value'].tolist()

Out = pd.Series(list(map(sum, zip(Xs, Ys))))

print(Out)