python - Python Pandas 基于需要过滤 DataFrame 的函数创建列
问题描述
我有一个更大的脚本,具有多种功能。在其中一个函数中,我正在创建一个数据框,然后创建一个应用单独函数的列。
在高层创建数据框的功能:
def data(file):
df = pd.DataFrame('A': [1,2,3,4], 'B':[5,5,6,6]
df['C'] = df['B'].apply(func)
“func”函数本质上应该按 B 列过滤数据框并返回“A”列中的值列表
def func(x):
df2 = df[df['B']==x]
names = df2['A']
return names
不幸的是,我无法使用全局调用将 df 检索到 func 中,因此我很困惑如何执行此请求。理想的输出应该是这样的:
A B C
1 5 [1,2]
2 5 [1,2]
3 6 [3,4]
4 6 [3,4]
解决方案
使用map
after groupby.apply
(PS:不建议在 column 中使用 list ,会增加调整难度)
df['C']=df.B.map(df.groupby('B').A.apply(list))
df
Out[872]:
A B C
0 1 5 [1, 2]
1 2 5 [1, 2]
2 3 6 [3, 4]
3 4 6 [3, 4]
推荐阅读
- ubuntu - 操作系统内存和erlang虚拟内存之间的差异?
- javascript - 如何将字符串值更改为时间戳?Javascript React-Native
- python - 有谁知道这些字符在word文档(docx)的表格中是什么?
- node.js - 如何知道容器已启动并正在运行(Dockerode)?
- azure - ADOS 2020.1 流水线页面布局
- html - 如何以角度创建 HTML?
- codenameone - 代号一中的FTP协议
- django - 此代码如何将两个类相互链接?
- wazuh - 用于 Wazuh 集成的 SSL conf
- python - 如果在更多 N 秒内没有答案然后返回 None 怎么做(因为如果没有发送消息,它将是无限的)