gpt4 book ai didi

python - 连接 Pandas 中同一索引的行值

转载 作者:太空狗 更新时间:2023-10-29 23:58:33 24 4
gpt4 key购买 nike

我的初始 DataFrame 如下所示:

   A    B  quantity
0 1 foo 1
1 1 baz 2
2 1 bar 2
3 1 faz 1
4 2 foo 2
5 2 bar 1
6 3 foo 3

我需要按“A”对其进行分组,然后制作一个“B”乘以“数量”的列表:

   A                               B
0 1 [foo, baz, baz, bar, bar, faz]
1 2 [foo, foo, bar]
2 3 [foo, foo, foo]

目前我正在使用 groupby() 然后是 apply():

def itemsToList(tdf, column):

collist = []
for row in tdf[column].iteritems():
collist = collist + tdf['quantity'][row[0]]*[row[1]]

return pd.Series({column: collist})

gb = df.groupby('A').apply(itemsToList, 'B')

我怀疑这是一种有效的方法,所以我正在寻找一种好的“pandaic”方法来实现这一点。

最佳答案

这可以分两步完成,生成一个新列来创建扩展的 str 值,然后 groupby在 'A' 和 applylist 到这个新列:

In [62]:
df['expand'] = df.apply(lambda x: ','.join([x['B']] * x['quantity']), axis=1)
df.groupby('A')['expand'].apply(list)

Out[62]:
A
1 [foo, baz,baz, bar,bar, faz]
2 [foo,foo, bar]
3 [foo,foo,foo]
Name: expand, dtype: object

编辑

从@Jianxun Li 的回答中得到 灵感 后确定:

In [130]:
df.groupby('A').apply(lambda x: np.repeat(x['B'].values, x['quantity']).tolist())

Out[130]:
A
1 [foo, baz, baz, bar, bar, faz]
2 [foo, foo, bar]
3 [foo, foo, foo]
dtype: object

这也有效:

In [131]:
df.groupby('A').apply(lambda x: list(np.repeat(x['B'].values, x['quantity'])))

Out[131]:
A
1 [foo, baz, baz, bar, bar, faz]
2 [foo, foo, bar]
3 [foo, foo, foo]
dtype: object

关于python - 连接 Pandas 中同一索引的行值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31243352/

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