python - 根据另一列中的值制作 DataFrame 中的值列表

标签 python pandas dataframe multiple-columns

我有一个 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')]`

我已经有一个函数可以对一个句子执行此操作,但我不知道如何对框架中的所有句子(具有相同 sente 值的句子)执行此操作。

`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"]]

有什么想法吗?

最佳答案

如果您愿意使用标准库,collections.defaultdict 提供了一个 O(n) 解决方案:

from collections import defaultdict

d = defaultdict(list)

for _, num, *data in df[['sente', 'value', 'pos', 'id']].itertuples():
    d[num].append(data)

结果:

defaultdict(list,
            {21: [('I', 'a', 1),
                  ('have', 'b', 2),
                  ('a', 'b', 3),
                  ('cat', 'a', 4),
                  ('!', 'd', 5)],
             22: [('My', 'a', 1),
                  ('cat', 'a', 2),
                  ('is', 'b', 3),
                  ('cute', 'a', 4),
                  ('.', 'd', 5)]})

关于python - 根据另一列中的值制作 DataFrame 中的值列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50089580/

相关文章:

python - 创建具有向量倍数的 numpy 矩阵的最快方法

python - Pyodbc 数字的默认类型

python - Scikit learn 的 AttributeError : 'LabelEncoder' object has no attribute 'classes_' ?

python - 如何修改 Django admin ManyToManyField 文本?

python - 从 Pandas 数据框中选择特定行

python - 在将混合类型的列值与 pandas Dataframe 中的 int 或 float 进行比较时跳过字符串值

python - 如何显示 pandas DataFrame 中元素的频率?

python-3.x - Pandas - 使用 to_hdf 添加同名数据框使文件大小翻倍

python - 索引 Pandas 数据帧 : integer rows, 命名列

python - Pandas 将时间序列重新采样为 24 小时