如何在 pandas.DataFrame 中插入满足条件的行值

Posted

技术标签:

【中文标题】如何在 pandas.DataFrame 中插入满足条件的行值【英文标题】:How to insert row values that meet a condition in pandas.DataFrame 【发布时间】:2019-08-05 12:53:49 【问题描述】:

我开始学习 Python,但遇到了以下问题:我正在尝试连接下面的两个数据框,以便有多个行包含相同的名称和参数,但适用于整个温度范围。

    import pandas as pd
    frame1 = pd.DataFrame('names':['bb1', 'bb2', 'bb3', 'bb4', 'bb5'],
                  'parameter1':['1', '2', '3', '4', '5'],
                  'parameter2':['0.1', '0.2', '0.3', '0.4', '0.5'])
    frame2 = pd.DataFrame('names':['bb1', 'bb2', 'bb3', 'bb4', 'bb5'],
                  'temperature':['300', '400', '500', '600', '700'])

输出应该是这样的

        names  parameter1    parameter2    temperature
    0   bb1    1             0.1           300
    1   bb1    1             0.1           400
    ...
    5   bb2    2             0.2           300
    6   bb2    2             0.2           400
    ...

感觉应该在 pandas 或 itertools 中有内置工具,但我就是想不通。

我尝试使用 itertools.product:

    pd.DataFrame(list(itertools.product(parameters,temperature)))

但我想不出一种方法来插入带有参数 1 和参数 2 的列以匹配名称列中的条目。帮助表示赞赏。

(编辑)固定示例框架1

【问题讨论】:

【参考方案1】:

您应该首先创建一个将每个名称链接到多个温度的数据框,然后使用 merge 函数将其合并到 frame1

import pandas as pd
from itertools import product
frame1 = pd.DataFrame('names':['bb1', 'bb2', 'bb3', 'bb4', 'bb5'],
                  'parameter1':['1', '2', '3', '4', '5'],
                  'parameter2':['0.1', '0.2', '0.3', '0.4', '0.5'])
names = ['bb1', 'bb2', 'bb3', 'bb4', 'bb5']
temperatures = ['300', '400', '500', '600', '700']
frame2 = pd.DataFrame.from_records(list(product(names, temperatures)),
                                   columns=['names', 'temperatures'])
df = frame1.merge(frame2)

【讨论】:

【参考方案2】:

您可以使用pd.merge 对“名称”进行内部连接。

>>> pd.merge(frame1, frame2, how='inner', on = 'names')


  names parameter1 parameter2 temperature
0   bb1          1        0.1         300
1   bb1          1        0.1         121
2   bb2          2        0.2         400
3   bb3          3        0.3         500
4   bb4          4        0.4         600
5   bb5          5        0.5         700

【讨论】:

这似乎只是将温度列添加到frame1。 从提出的问题中,我可以看到您想将温度与 frame1 合并。如果你的意思是别的,请告诉我。

以上是关于如何在 pandas.DataFrame 中插入满足条件的行值的主要内容,如果未能解决你的问题,请参考以下文章

pandas在dataframe数据列中插入全是全是固定数值或者固定文本内容的数据列(add a column to pandas dataframe with constant values)

根据日期列在pandas Dataframe中插入行

如何在pandas dataframe中为新列添加值?

pandas dataframe.to_gbq 如何上传到远程Table?

Pandas:DataFrame数据的更改插入新增的列和行

将 Pandas Dataframe 的输出插入 Redshift 表