如何在 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)