如何根据条件在pandas列中连接字符串

时间:2017-04-25 08:29:10

标签: python list pandas dataframe group-by

给定数据框:

  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)

1 个答案:

答案 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]