gpt4 book ai didi

python - apply 函数返回 pandas 中的数据框

转载 作者:太空宇宙 更新时间:2023-11-04 11:09:40 25 4
gpt4 key购买 nike

我有两个数据框,一个包含 [a,b,c] 列,另一个包含 [a,b,d] 列,如下所示:

matrix = [(222, 34, 23),
(333, 31, 11),
(444, 16, 21),
(555, 32, 22),
(666, 33, 27),
(777, 35, 11)
]

# Create a DataFrame object
dfObj = pd.DataFrame(matrix, columns=list('abc'))

print(dfObj)



a b c
0 222 34 23
1 333 31 11
2 444 16 21
3 555 32 22
4 666 33 27
5 777 35 11


matrix = [(222, 34, 5),
(333, 31, 6),
(444, 16, 7),
(555, 32, 8),
(666, 33, 9),
(777, 35, 10)
]

# Create a DataFrame object
dfObj1 = pd.DataFrame(matrix, columns=list('abd'))

我想构造一个包含 [a,b,c,d] 列的新矩阵,如下所示:

def test_func(x):
return dfObj1.d[dfObj1['a'].isin([x['a']])]
dfObj['d'] = dfObj.apply(test_func, axis = 1)

但是,dfObj.apply(test_func, axis = 1) 的输出是一个数据帧,如下所示:

    1   2   3   4   5
1 6.0 NaN NaN NaN NaN
2 NaN 7.0 NaN NaN NaN
3 NaN NaN 8.0 NaN NaN
4 NaN NaN NaN 9.0 NaN
5 NaN NaN NaN NaN 10.0

我期待以下输出 - [6,7,8,9,10]

我知道有几种方法可以实现这个目标,但我只是想找出我在这种方法中做错了什么。

最佳答案

如果在函数中返回带有.values 的numpy 数组并且在DataFrame.apply 中添加result_type='expand' 参数是可能的:

def test_func(x):
return dfObj1.loc[dfObj1['a'].isin([x['a']]), 'd'].values

dfObj['d'] = dfObj.apply(test_func, axis = 1, result_type='expand')
print(dfObj)
a b c d
0 222 34 23 5
1 333 31 11 6
2 444 16 21 7
3 555 32 22 8
4 666 33 27 9
5 777 35 11 10

如果需要返回带有缺失值的标量,另一个想法是使用 nextiter:

def test_func(x):
return next(iter(dfObj1.loc[dfObj1['a'].isin([x['a']]), 'd']), np.nan)

dfObj['d'] = dfObj.apply(test_func, axis = 1)

但更好/更快的是使用DataFrame.merge :

dfObj= dfObj.merge(dfObj1[['a','d']], on='a', how='left')
print(dfObj)
a b c d
0 222 34 23 5
1 333 31 11 6
2 444 16 21 7
3 555 32 22 8
4 666 33 27 9
5 777 35 11 10

Series.map :

dfObj['d'] = dfObj['a'].map(dfObj1.set_index('a')['d'])
print(dfObj)
a b c d
0 222 34 23 5
1 333 31 11 6
2 444 16 21 7
3 555 32 22 8
4 666 33 27 9
5 777 35 11 10

关于python - apply 函数返回 pandas 中的数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58608738/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com