从现有 DataFrame 构建一个新的 DataFrame,其中一列包含列表(使用列表填充新行)

2024-02-20

我有一个像这样的数据框:

df = pd.DataFrame({'name': ['toto', 'tata', 'tati'], 'choices': 0})
df['choices'] = df['choices'].astype(object)
df['choices'][0] = [1,2,3]
df['choices'][1] = [5,4,3,1]
df['choices'][2] = [6,3,2,1,5,4]

print(df)

             choices  name
0           [1, 2, 3]  toto
1        [5, 4, 3, 1]  tata
2  [6, 3, 2, 1, 5, 4]  tati

我想像这样构建一个基于 df 的 DataFrame

             choice  rank  name
0                 1     0  toto
1                 2     1  toto
2                 3     2  toto
3                 5     0  tata
4                 4     1  tata
5                 3     2  tata
6                 1     3  tata
7                 6     0  tati
8                 3     1  tati
9                 2     2  tati
10                1     3  tati
11                5     4  tati
12                4     5  tati

我想使用每个值的列表和索引来填充新行。

我做了这个

size = df['choices'].map(len).sum()
df2 = pd.DataFrame(index=range(size), columns=df.columns)
del df2['choices']
df2['choice'] = np.nan
df2['rank'] = np.nan

k = 0
for i in df.index:
    choices = df['choices'][i]
    for rank, choice in enumerate(choices):
        df2['name'][k] = df['name'][i]
        df2['choice'][k] = choice
        df2['rank'][k] = rank
        k += 1

但我更喜欢矢量化的解决方案。 Python/Pandas 可以吗?


In [4]: s = df.choices.apply(Series).stack()

In [5]: s.name = 'choices' # needs a name to join

In[6]: del df['choices']

In[7]: df1 = df.join(s.reset_index(level=1))

In[8]: df1.columns = ['name', 'rank', 'choice']

In [9]: df1.sort(['name', 'rank']).reset_index(drop=True)
Out[9]: 
    name  rank  choice
0   tata     0       5
1   tata     1       4
2   tata     2       3
3   tata     3       1
4   tati     0       6
5   tati     1       3
6   tati     2       2
7   tati     3       1
8   tati     4       5
9   tati     5       4
10  toto     0       1
11  toto     1       2
12  toto     2       3

这与我的这个解决方案 https://stackoverflow.com/questions/17116814/pandas-how-do-i-split-text-in-a-column-into-multiple-columns/17116976#17116976,但在您的情况下,您使用索引(排名)而不是删除它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从现有 DataFrame 构建一个新的 DataFrame,其中一列包含列表(使用列表填充新行) 的相关文章

  • 使用 glGetFloatv 检索 pyglet 中的模型视图矩阵

    我正在使用 pyglet 在 python 中进行 3D 可视化 并且需要检索模型视图和投影矩阵来进行一些选择 我使用以下方式定义我的窗口 from pyglet gl import from pyglet window import wi
  • 如何在python 2.7.8中将非英文字母的字典写入文件?

    这是一个简单的例子 test location 北京 country 中国 the values are Chinese 在文件 test log 中 location 北京 country 中国 在python 2 7 8中 当我需要输出
  • 如何将 UPX 与 pyinstaller 一起使用?

    如何将 UPX 与 pyinstaller 一起使用 我正在关注文档 我已经下载了UPX 我的文件如下所示 import csv import selenium import pandas print Hello 然后我运行 pyinsta
  • 使用 Matplotlib 的范围绘制图像的 3D 轮廓

    正如我所介绍的here https stackoverflow com questions 18792624 fits image input to a range in plot python 在二维中 我想知道如何 缩放 要绘制到绘图中
  • 手动安装开放多语言世界网 (NLTK)

    我正在使用一台只能访问专用网络并且无法从命令行发送指令的计算机 因此 每当我必须安装 Python 包时 我都必须手动安装 我什至不能使用 Pypi 幸运的是 NLTK 允许我手动下载语料库 从here https www nltk org
  • 如何使用appium自动化Android手机后退按钮

    我正在使用 Appium python 客户端库 对 Android 上的混合移动应用程序进行测试自动化 我无法找到任何方法来自动化或创建手势以使用 电话后退 按钮返回到应用程序的上一页 有没有可以使用的驱动函数 我尝试了 self dri
  • 使用 argparse 指定默认文件名,但不使用 --help 打开它们?

    假设我有一个对文件执行一些操作的脚本 它在命令行上获取此文件的名称 但如果未提供 则默认为已知文件名 content txt 说 与蟒蛇的argparse 我使用以下内容 parser argparse ArgumentParser des
  • 使用 matplotlib 设置或固定二元分布值

    I ve animated a bivariate gaussian distribution using matplotlib 我已经计算过这个distribution通过调整COV matrix来考虑特定的变量 我可以提供有关此过程的更
  • 模拟类:Mock() 还是 patch()?

    我在用mock http www voidspace org uk python mock index html使用Python 想知道这两种方法中哪一种更好 阅读 更Pythonic 方法一 只需创建一个模拟对象并使用它 代码如下 def
  • 导入我自己的模块时出现“ImportError:没有名为...的模块”

    我正在尝试导入模块 但不断收到导入错误 在 PortfolioStatus py 文件中 我有以下代码 它从 share data py 模块导入 share data 类 from Shares share data import sha
  • CryptoJS 和 Pycrypto 一起工作

    我正在使用 CryptoJS v 2 3 加密 Web 应用程序中的字符串 并且需要在服务器上使用 Python 对其进行解密 因此我使用 PyCrypto 我觉得我错过了一些东西 因为我无法让它工作 这是JS Crypto AES enc
  • 如何使用资源模块来衡量函数的运行时间?

    我想使用Python代码测量函数的CPU运行时间和挂钟运行时间 此处建议资源模块 如何以 Python 代码 不是从终端 的形式分别测量函数的 CPU 运行时间和挂钟运行时间 https stackoverflow com q 192046
  • 对 Python 列表元素进行分组

    我有一个 python 列表 如下所示 my list 25 1 0 65 25 3 0 63 25 2 0 62 50 3 0 65 50 2 0 63 50 1 0 62 我想根据以下规则对它们进行排序 1 gt 0 65 0 62 l
  • python 相当于 sed

    有没有一种方法 无需双循环即可完成以下 sed 命令的操作 Input Time Banana spinach turkey sed i Banana s Toothpaste file Output Time BananaToothpas
  • PyMC3 和 Theano - 导入 pymc3 后,有效的 Theano 代码停止工作

    一些简单的 theano 代码可以完美运行 当我导入 pymc3 时停止工作 这里有一些片段可以重现错误 Initial Theano Code this works import theano tensor as tsr x tsr ds
  • 混合两个列表的Pythonic方法[重复]

    这个问题在这里已经有答案了 我有两个长度为 n 和 n 1 的列表 a 1 a 2 a n b 1 b 2 b n 1 我想要一个函数作为结果给出一个列表 其中包含两个中的替代元素 即 b 1 a 1 b n a n b n 1 以下方法有
  • Python Pandas:向类 pandas.core.series.Series 添加方法

    我想在 Python 中处理时间序列 因此 Pandas 的 Series 类非常完美 并且有很多有用的方法 现在我想添加一些我需要但未实现的方法 例如 假设我有兴趣添加一个方法 该方法将两次一值附加到时间序列中 让我们调用该方法appen
  • 重新安装后使用 pandas dataframes 时出现问题

    我已经重新安装了 Python 和 Anaconda 现在面临以下问题 在我将 pkl 文件加载到数据帧并尝试 查看 该文件后 如下所示 df pd read pickle example pkl df 我收到错误 AttributeErr
  • 将同一 numpy 数组的两个视图组合成单个视图而不复制数组?

    我有一个大型 2d numpy 数组 我想删除它的子集并处理函数剩下的内容 我需要对许多子集执行此操作 因此理想情况下我不想每次都创建数组的副本 该函数不会更改数组中的任何值 mat np load filename mat 1 mat i
  • Python Web 编程的不同方法的优缺点

    我想使用 Python 编写一些服务器端脚本 但我对这样做的方法有点迷失了 它从 DIY CGI 方法开始 似乎以一些相当强大的框架结束 这些框架基本上可以自己完成所有工作 中间有很多东西 比如web py http webpy org P

随机推荐