gpt4 book ai didi

python - 如何根据条件连接 pandas 列中的字符串

转载 作者:太空宇宙 更新时间:2023-11-03 15:20:07 26 4
gpt4 key购买 nike

给定一个数据框:

  text   binary
1 apple 1
2 bee 0
3 cider 1
4 honey 0

我想要获得 2 个列表:一 = [苹果汁],零 = [蜂蜜]

如何根据“二进制”列中所属的组(1 或 0)将“文本”列中的字符串连接起来?

我编写了 for 循环来检查每一行二进制是否为 1 或 0,然后继续将文本列中的文本附加到列表中,但我想知道是否有更有效的方法,因为在 pandas 中,我们可以加入文本只需调用 ' '.join(df.text) 即可在列中。但是我们如何根据条件来做到这一点呢?

--后续问题--

  binary   text1   text2  text3
0 1 hello this table
1 1 cider that chair
2 0 bee how mouse
3 0 winter bottle fan

我想做同样的事情,但有多个文本列。

raw = defaultdict(list)
raw['text1'] = ['hello','cider','bee','winter']
raw['text2'] = ['this','that','how','bottle']
raw['text3'] = ['table','chair','mouse','fan']
raw['binary'] = [1,1,0,0]

df= pd.DataFrame.from_dict(raw)
text1 = df.groupby('binary').text1.apply(list)
text2 = df.groupby('binary').text2.apply(list)
text3 = df.groupby('binary').text3.apply(list)

我怎样才能写出这样的东西:

for i in ['text1','text2','text3']:
df.groupby('binary').i.apply(list)

最佳答案

更新:跟进问题

每个 text* 列都有一个列表,按 binary 列分组

In [56]: df.set_index('binary').stack().groupby(level=[0,1]).apply(list).unstack()
Out[56]:
text1 text2 text3
binary
0 [bee, winter] [how, bottle] [mouse, fan]
1 [hello, cider] [this, that] [table, chair]

binary 列分组的所有 text 列的一个列表

In [54]: df.set_index('binary').stack().groupby(level=0).apply(list)
Out[54]:
binary
0 [bee, how, mouse, winter, bottle, fan]
1 [hello, this, table, cider, that, chair]
dtype: object

旧答案:

IIUC 您可以按binary 分组并将list 应用于分组的text 列:

In [8]: df.groupby('binary').text.apply(list)
Out[8]:
binary
0 [bee, honey]
1 [apple, cider]
Name: text, dtype: object

或者:

In [10]: df.groupby('binary').text.apply(list).reset_index()
Out[10]:
binary text
0 0 [bee, honey]
1 1 [apple, cider]

关于python - 如何根据条件连接 pandas 列中的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43605405/

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