首页 > 解决方案 > 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]

标签: pythonpandas

解决方案


使用mapafter 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]

推荐阅读