python - 过滤数据框以创建另一个数据框

标签 python pandas

我已经有一个数据框,类似于

x     label     word

10      1        is
20      2        goal
15      2        left
13      0        am
9       1        are
7       0        I
6       1        hello
2       0        world

我正在尝试创建另一个数据框,一旦我执行了从此数据框提取的操作,它看起来像这样:

label    min    max    words
 0        2     13     I, world, am
 1        6     10     hello, are, is
 2        15    20     goal, left

words 列中的单词可以按任何顺序排列。它们代表该特定标签的单词。

我尝试过使用 df.groupby ,但我似乎不明白它是如何工作的。有人可以指导我应该寻找什么方法吗?

最佳答案

使用DataFrameGroupBy.agg通过列名和聚合函数的字典。然后在列中获取MultiIndex,因此需要将其展平 - 这里通过mapjoin,最后如果需要重命名列:

df = df.groupby('label').agg({'x':['min','max'], 'word':', '.join})
df.columns = df.columns.map('_'.join)
d = {'x_min':'min','x_max':'max','word_join':'words'}
df = df.rename(columns=d).reset_index()
print (df)
   label  min  max           words
0      0    2   13    am, I, world
1      1    6   10  is, are, hello
2      2   15   20      goal, left

如果想要聚合列word列表:

df = df.groupby('label').agg({'x':['min','max'], 'word': lambda x: x.tolist()})
df.columns = df.columns.map('_'.join)
d = {'x_min':'min','x_max':'max','word_<lambda>':'words'}
df = df.rename(columns=d).reset_index()
print (df)
   label  min  max             words
0      0    2   13    [am, I, world]
1      1    6   10  [is, are, hello]
2      2   15   20      [goal, left]

关于python - 过滤数据框以创建另一个数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51263611/

相关文章:

python - 二进制搜索多个值

python - 使用 tkinter,python 将输入数据显示到文本框中时出现问题

python - 由于 : file does not start with RIFF id,无法将文件 file.wav 作为 WAV 打开

python - 使用 Python 在 PDF 中搜索文本?

python - Pandas 蟒 : how to get values on data frame every 10 steps?

python - Pandas:MultiIndex 列的最佳方式

python - 结合 groupby 并在 multiIndex DataFrames 中应用

python - 无法在 mac os x 10.10 上使用 pip 安装 cffi

python - 在多索引情况下查找出现最大值的 Dataframe 列

python - 对值进行排序并根据 Pandas 行创建新列