将其他数据帧中的值获取到新数据帧的循环中

Posted

技术标签:

【中文标题】将其他数据帧中的值获取到新数据帧的循环中【英文标题】:Get Values from other Dataframe into my Loop for the new Dataframe 【发布时间】:2022-01-22 04:56:29 【问题描述】:

我有一个 Dataframe (df1),其中 TimeCategory 作为索引,不同的日期作为这一天每个 TimeCategory 的列和值,如下所示:

TimeCategory 01.01.2021
0-5 3
5-7 0
7-10 1
10-12 5
12-14 5

我还有第二个数据框 (df2),其中包含 Date 和 TimeCategory 列。

Dates Time
01.01.2021 0-5
01.01.2021 07-10
02.01.2021 07-10
02.01.2021 05-5
03.01.2021 12-14

我在第二个数据帧 (df2) 中添加了一列,我想在其中根据日期和时间获取第一个数据帧 (df2) 的值。

我从不同的日期 (Date_List) 和不同的时间类别 (TimeCategory_List) 中制作了两个列表。

我的 If-Else-Condition 工作正常。

但我不知道如何从 df1 获取值 (????) 到我的循环中以将其写入 df2 的新列 [24]。

for i in range(0,len(df2)):

    if df2.loc[:,"Date"].iloc[i,] in Date_List and df2.loc[:,"TimeCategory"].iloc[i,] in TimeCategory_List: 
       
       df2.iat[i,24]= ????
    else: 
        df2.iat[i,24]=0

【问题讨论】:

【参考方案1】:

IIUC,您不需要循环,但需要 merge。您必须先使用 melt 重新格式化您的第一个数据框,然后再将其与第二个数据框合并。

>>> df1.rename(columns='TimeCategory': 'Time').melt('Time', var_name='Dates') \
       .merge(df2, on=['Time', 'Dates'], how='right')

    Time       Dates  value
0    0-5  01.01.2021    3.0
1  07-10  01.01.2021    NaN  # different from 7-10
2  07-10  02.01.2021    NaN  # different from 7-10
3   05-5  02.01.2021    NaN  # no match from df1
4  12-14  03.01.2021    NaN  # no match from df1

注意:这里的问题是因为'07-10''7-10'不一样,应该使用通用语法。

【讨论】:

非常感谢 melt 功能使合并两个数据帧成为可能,这帮助我解决了我的问题。 很高兴读到。如果这适合您的需要,请考虑accept my answer :)

以上是关于将其他数据帧中的值获取到新数据帧的循环中的主要内容,如果未能解决你的问题,请参考以下文章

R:从一个数据帧中提取行,基于列名匹配来自另一个数据帧的值

熊猫,我怎样才能避免使用 iterrow (如何根据来自另一个数据帧的值将值分配给数据帧中的新列)

基于将另一个单元格与另一个数据帧的单元格-熊猫进行比较,更改一个数据帧中单元格的值

如果 pyspark 数据帧的行基于两列的值位于另一个数据帧中,如何删除它们?

获取具有特定数量的重复值的行

如何根据一个数据帧中的列值和R中另一个数据帧的列标题名称有条件地创建新列