我有两个几乎相同的数据帧(A和B)。A&;B以完全相同的顺序具有相同的唯一标识符
每个DF(A和B)的指数几乎相似(农产品、熟食、乳制品等)。列A包含完整索引,而B包含A的子集,但有时也可能完全匹配A
我已经设置了一个循环来同时比较每一列。我很难从每一列的每个索引中获取值
示例数据帧:
import numpy as np
import pandas as pd
nan = np.nan
# dfA
dfA = pd.DataFrame(
np.array(
[
[1, 2, nan, nan],
[1, nan, 1, 2],
[nan,5,6, 1],
[4, 3, 3, nan],
[nan, 1, nan, 2],
[2, 1, nan, nan],
[1, 3, 1, 2],
[nan, nan, nan, 3],
[3, nan, 1, 2],
[2, nan, 2, nan],
]
),
columns=['165413658', '546817846', '685413554', '54684114'],
index=['dairy', 'produce', 'hot_deli', 'bakery', 'cold_deli', 'freshmeat', 'flowers', 'fruit', 'beer', 'wine'])
# dfB
dfB = pd.DataFrame(
np.array(
[
[1, 2, nan, 1],
[nan, 4, 1, nan],
[4, nan, nan, 1],
[4, 3, 4, 2],
[nan, 1, 2, 1],
[1, nan, nan, 2],
[nan, 3, 2, nan],
[1, nan, 1, nan],
]
),
columns=['165413658', '546817846', '685413554', '54684114'],
index=['dairy', 'bakery', 'wine', 'produce', 'hot_deli', 'cold_deli', 'flowers', 'beer']
)
以下是我目前的代码:
utility_rate = []
for index, (userid1, userid2) in enumerate(zip(dfA, dfB)):
act_count_dept = dfA[userid1]
utility_rate.append(act_count_dept)
这会打印出我所有数据的列表,但我不确定如何有效地获取数据来比较dfA和dfB中的列
基本上,我想取dfA的第n列,并计算行索引中的数据。然后,获取dfB的相同第n列并计算这些行索引中的数据。最后,将dfB/dfA的值除以它们匹配的地方,然后计算每个指标(面包房、农产品、熟食店等)的总匹配。这是我数据验证的一部分,其中dfA是真实数据,dfB是我的预测数据,我试图弄清楚它的预测是否与dfA类似
期望输出:
# dfC
dfC = pd.DataFrame(
np.array(
[
[1, 1, nan, nan],
[0.25, nan, 0.25, 1],
[nan, 0.2, 0.33, 1],
[3, nan, 0.25, nan],
[nan, nan, nan, 1],
[nan, nan, nan, nan],
[nan, 3, 0.5, nan],
[nan, nan, nan, 3],
[3, nan, nan, nan],
[0.5, nan, nan, nan],
]
),
columns=['165413658', '546817846', '685413554', '54684114'],
index=['dairy', 'produce', 'fruit', 'bakery', 'cold_deli', 'freshmeat', 'flowers', 'hot_deli', 'beer', 'wine'])
通过所需的输出,您可能会知道dfA中的某些索引在dfB中找不到,反之亦然。理想情况下,我希望将多余的数据存储在另一个DF中,但这超出了这个问题的范围
我认为代码应该是这样的:
utility_rate = []
for index, (userid1, userid2) in enumerate(zip(dfA, dfB)):
act_count_dept = dfA[userid1] # grab indices and its values
# grab indices and its values for dfB
# compare: if dfA index val == dfB index val:
# final_calc= dfB.index / dfA.index
# elif no match:
# dump into other dfB
utility_rate.append(final_calc)
熊猫1.1.0中有一个compare()。您可以使用它来查找两个数据帧中的总匹配百分比。我还没有测试过,但下面的代码应该会给您一个具有相同值的数据帧。获得该数据帧后,可以使用原始数据帧形状和新数据帧形状计算百分比
希望这至少能给你一个指针。有关更多想法,请参阅this:
相关问题 更多 >
编程相关推荐