给定数据框:
text binary
1 apple 1
2 bee 0
3 cider 1
4 honey 0
我想获得2个名单: 一个= [苹果酒],零= [蜜蜂]
如何加入'文本中的字符串'基于他们所属的组(1或0)的列'二进制'?
我写了for循环来检查每一行,如果二进制是1或0然后继续将文本列中的文本附加到列表但我想知道是否有更高效的方式,因为在熊猫,我们可以通过简单地调用'来加入列中的文本。 '。加入(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)
答案 0 :(得分:1)
更新:跟进问题
按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]
按text
列
binary
列的一个列表
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
OLD回答:
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]