如何迭代多个数据框的特定列,然后比较它们的值以找到最大的一个?
How to iterate over a specific column of multiple dataframes and then compare their values to find the greatest one?
为了详细说明,我有 3 个数据框,其中包含各个城市的收入数据。我将 3 家公司的数据分别存储在这 3 个数据框中,所以我只想知道哪家公司的城市收入最高。
df1 看起来像:
{[city: A, B, C, D, E] , [revenue: 10,20,25,30,70]}
df2 看起来像:
{[city: A, C, D, E, F] , [revenue: 13, 23, 33, 43, 53]}
df3 看起来像:
{[city: A, B, C, D, E] , [revenue: 11,22,32,44,55]}
正如我们所见,并不是所有的公司都在所有的城市。我正在考虑做一个嵌套循环来完成这个任务并遍历列,然后如果城市匹配,比较收入并找到最大的公司(也必须将其存储在新的 df 中的某个地方)但我不能想想究竟如何。
IIUC,将所有DataFrames合并成一个,找出最大值的城市:
df1 = pd.DataFrame({"city": ["A", "B", "C", "D", "E"] , "revenue": [10,20,25,30,70]})
df2 = pd.DataFrame({"city": ["A", "C", "D", "E", "F"] , "revenue": [13, 23, 33, 43, 53]})
df3 = pd.DataFrame({"city": ["A", "B", "C", "D", "E"] , "revenue": [11,22,32,44,55]})
df_all = pd.concat([df.set_index("city").rename(columns={"revenue": i + 1})
for i, df in enumerate([df1, df2, df3])], axis=1)
df_all["company_max"] = df_all.idxmax(axis=1)
1 2 3 company_max
A 10.0 13.0 11.0 2
B 20.0 NaN 22.0 3
C 25.0 23.0 32.0 3
D 30.0 33.0 44.0 3
E 70.0 43.0 55.0 1
F NaN 53.0 NaN 2
为了详细说明,我有 3 个数据框,其中包含各个城市的收入数据。我将 3 家公司的数据分别存储在这 3 个数据框中,所以我只想知道哪家公司的城市收入最高。
df1 看起来像:
{[city: A, B, C, D, E] , [revenue: 10,20,25,30,70]}
df2 看起来像:
{[city: A, C, D, E, F] , [revenue: 13, 23, 33, 43, 53]}
df3 看起来像:
{[city: A, B, C, D, E] , [revenue: 11,22,32,44,55]}
正如我们所见,并不是所有的公司都在所有的城市。我正在考虑做一个嵌套循环来完成这个任务并遍历列,然后如果城市匹配,比较收入并找到最大的公司(也必须将其存储在新的 df 中的某个地方)但我不能想想究竟如何。
IIUC,将所有DataFrames合并成一个,找出最大值的城市:
df1 = pd.DataFrame({"city": ["A", "B", "C", "D", "E"] , "revenue": [10,20,25,30,70]})
df2 = pd.DataFrame({"city": ["A", "C", "D", "E", "F"] , "revenue": [13, 23, 33, 43, 53]})
df3 = pd.DataFrame({"city": ["A", "B", "C", "D", "E"] , "revenue": [11,22,32,44,55]})
df_all = pd.concat([df.set_index("city").rename(columns={"revenue": i + 1})
for i, df in enumerate([df1, df2, df3])], axis=1)
df_all["company_max"] = df_all.idxmax(axis=1)
1 2 3 company_max
A 10.0 13.0 11.0 2
B 20.0 NaN 22.0 3
C 25.0 23.0 32.0 3
D 30.0 33.0 44.0 3
E 70.0 43.0 55.0 1
F NaN 53.0 NaN 2