gpt4 book ai didi

python - 在对 apply() 的调用中添加重复的数据框行

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

我的其中一个专栏是一个字符串,其中包含用空格分隔的单独值。我想为这些值中的每一个创建一个单独的行,复制所有其他列值。例如:

>> d = {'A': ['Alice', 'Bob', 'Coco'],
'B': ['X1', 'Y1 Y2', 'Z1 Z2 Z3'],
'C': [1, 2, 3]}

>> df = pd.DataFrame(d)

>> df = df.apply(func, axis=1)

>> print df
A B C
0 Alice X1 1
1 Bob Y1 2
2 Bob Y2 2
3 Coco Z1 3
4 Coco Z2 3
5 Coco Z3 3

我对如何有效地(或老实说)编写“func”有点困惑。请注意 - 我有 157 列,因此任何需要指定列名的东西都不理想。

到目前为止,我得到的是为每一行打印出正确的扩展数据帧,但我不知道如何合并应用的结果:

def func(x):
bs = x.B.split(' ')

df = pd.concat([x]*len(bs), axis=1).T.reset_index(drop=True)
for i in range(len(bs)):
df.ix[i, 'B'] = bs[i]

print df
return df

这会导致以下错误。这似乎是维度的某种问题(从输入行创建了 157 列和 3 个新行),但我对 apply() 对结果的作用以及如何解决这个问题感到困惑。

cannot copy sequence with size 157 to array axis with dimension 3

最佳答案

我不认为你真的需要一个 groupby 来做你想做的事。使用扩展的 str.split(),然后是 stack()join() 应该可以满足您的需求:

>>> tmp = df['B'].str.split(expand=True)
>>> tmp = tmp.stack().reset_index(1, drop=True)
>>> tmp.to_frame('B').join(df.drop('B', 1))
B A C
0 X1 Alice 1
1 Y1 Bob 2
1 Y2 Bob 2
2 Z1 Coco 3
2 Z2 Coco 3
2 Z3 Coco 3

当然,您可以在应用于 groupby 的函数中执行所有这些操作,但在这种情况下这是多余的。

关于python - 在对 apply() 的调用中添加重复的数据框行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33558654/

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