【发布时间】:2018-04-29 17:48:38
【问题描述】:
我有一个 pandas 数据框,如图所示。该框架中还有更多与任务无关的列。
id pos value sente
1 a I 21
2 b have 21
3 b a 21
4 a cat 21
5 d ! 21
1 a My 22
2 a cat 22
3 b is 22
4 a cute 22
5 d . 22
我想从某些列中列出一个列表,所以第一句 (sente=21) 和其他句子看起来都差不多。意味着每个句子都有自己的唯一条目。
`[('I', 'a', '1'), ..., ('!','d','5')]`
我已经有一个函数可以为一个句子执行此操作,但我不知道如何为框架中的所有句子(具有相同句子值的句子)执行此操作。
`class SentenceGetter(object):
def __init__(self, data):
self.n_sent = 1
self.data = data
self.empty = False
def get_next(self):
for t in self.data:
try:
s = self.data[(self.data["sente"] == 21)]
self.n_sent += 1
return
s["id"].values.tolist(),
s["pos"].values.tolist(),
s["value"].values.tolist()
except:
self.empty = True
return None,None,None
foo = SentenceGetter(df)
sent, pos, token = foo.get_next()
in = zip(token, pos, sent)
`
由于我的框架非常大,所以无法使用这样的结构:
df.loc[((df["sente"] == df["sente"].shift(-1)) & (df["sente"] == df["sente"].shift(+1))), ["pos","value","id"]]
有什么想法吗?
【问题讨论】:
标签: python pandas dataframe multiple-columns