将其他数据帧中的值获取到新数据帧的循环中
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 :)以上是关于将其他数据帧中的值获取到新数据帧的循环中的主要内容,如果未能解决你的问题,请参考以下文章
熊猫,我怎样才能避免使用 iterrow (如何根据来自另一个数据帧的值将值分配给数据帧中的新列)
基于将另一个单元格与另一个数据帧的单元格-熊猫进行比较,更改一个数据帧中单元格的值