【问题标题】:Pandas, Apply Function to Data Frame That Returns One to Many RowsPandas,将函数应用于返回一对多行的数据框
【发布时间】:2019-11-26 08:24:24
【问题描述】:

我有一个 pandas 数据框,我需要对其应用一个函数。但是,该函数会为数据框中的单行返回许多项。我想用函数返回的值创建一个新的数据框。因此,到目前为止,当我应用该函数时,新数据框的行数与原始数据框的行数相同,函数中的列表/系列作为行。我在新数据框中需要的是从函数返回的值作为列(扁平列表)。另外,我想知道这是否是使用 Pandas 的好方法(就利用库的效率而言)还是坚持使用纯 python 会更好?

这是我用的:

def get_children(id):
    children = []
    suff = ['0', '1', '2', '3']
    for s in suff:
        children.append(id+s)

    return pd.Series(children)

df = pd.DataFrame()
df = all_attrbs['id'].apply(get_children)

输入:

all_attrbs:

id

0
1
2
3

预期输出:

df:

t_id

00
01
02
03
11
12
13
14
20
21
22
23
30
31
32
33

【问题讨论】:

  • 什么是 all_attrbs?

标签: python pandas python-2.7 numpy


【解决方案1】:

我不确定您的数据是什么样的,但这是一种有效的方法:

df = pd.DataFrame({'id' : [0,1,2,3,4,5,6]})

flattened_list = ["{}_{}".format(x, i) for i in range(4) for x in df['id']]

df2 = pd.DataFrame(flattened_list)

输出flattened_list:

['0_0',
 '1_0',
 '2_0',
 '3_0',
 '4_0',
 '5_0',
 '6_0',
 '0_1',
 '1_1',
 '2_1',
 '3_1',
 '4_1',
 '5_1',
 '6_1',
 '0_2',
 '1_2',
 '2_2',
 '3_2',
 '4_2',
 '5_2',
 '6_2',
 '0_3',
 '1_3',
 '2_3',
 '3_3',
 '4_3',
 '5_3',
 '6_3']

【讨论】:

  • 谢谢,但我需要的是要在输出 df 中展平的列表。添加了对问题的编辑。
  • 好的,我编辑了我的答案。 @c00der 您可以不使用 apply 而是使用双重列表理解来做到这一点
  • 啊,所以,一个纯python实现。我想知道是否有 Pandas 本机方法可以做到这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-14
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多