gpt4 book ai didi

python - 将函数应用于返回多行的 pandas 数据框

转载 作者:行者123 更新时间:2023-12-01 05:04:24 25 4
gpt4 key购买 nike

我想对 pandas DataFrame 应用一个函数,将某些行分成两部分。例如,我可能将其作为输入:

df = pd.DataFrame([{'one': 3, 'two': 'a'}, {'one': 5, 'two': 'b,c'}], index=['i1', 'i2'])
one two
i1 3 a
i2 5 b,c

我想要这样的输出:

      one  two
i1 3 a
i2_0 5 b
i2_1 5 c

我的希望是我可以在数据帧上使用 apply() ,调用一个返回包含 1 行或多行的数据帧的函数,然后将其合并在一起。然而,这似乎根本不起作用。这是一个测试用例,我只是尝试复制每一行:

dfa = df.apply(lambda s: pd.DataFrame([s.to_dict(), s.to_dict()]), axis=1)
one two
i1 one two
i2 one two

因此,如果我返回一个 DataFrame,该 DataFrame 的列名称似乎会成为行的内容。这显然不是我想要的。

这里还有一个问题是通过使用 .groupby() 解决的,但是我认为这不适用于我的情况,因为我实际上不想按任何内容进行分组。

正确的做法是什么?

最佳答案

你有一个困惑的数据库(逗号分隔的字符串,你应该有单独的列)。我们首先解决这个问题:

df2 = pd.concat([df['one'], pd.DataFrame(df.two.str.split(',').tolist(), index=df.index)], axis=1)

这给了我们一些更简洁的东西

In[126]: df2
Out[126]:
one 0 1
i1 3 a None
i2 5 b c

现在,我们可以做

In[125]: df2.set_index('one').unstack().dropna()
Out[125]:
one
0 3 a
5 b
1 5 c

调整索引(如果需要)很简单,留给读者作为练习。

关于python - 将函数应用于返回多行的 pandas 数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25344799/

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