首页 > 解决方案 > Pandas:按日期确定 DF1 MaxCol,将 DF2 Maxcol 值复制到 MaxValueCol

问题描述

我正在使用 Python 2.7 和 Pandas 3.3.4。我有 2 个数据帧:df1 和 df2。在下面的代码中,我想确定 df1 中每一行的最大值列,将 df2 中的列值复制到 df2 中的 MaxValueCol。下面的代码(有许多变体)适用于除了在 df2 中复制值的最后一行之外的所有代码。我得到的错误是:“ValueError:错误的项目数通过了 100,位置意味着 1”

如果我用以下注释语句替换最后一行,它会运行,但它是一个多列 df,而不是所需的单列最大值。

谢谢你。

enter code here
import pandas as pd
import numpy as np

np.random.seed(0)
df1 = pd.DataFrame(np.random.randn(100,6),columns=list('ABCDEF'))
df2 = pd.DataFrame(np.random.randn(100,6),columns=list('ABCDEF'))
df1['maxColumn'] = df1.idxmax(axis=1)
df2['maxValue'] = df2[pd1.loc[:,'maxColumn']]
# maxValueV = df2[df1.loc[:,'maxColumn']]

下面是修改后的代码,以缩短行数和列数,下面显示预期结果。需要找到 df1 中每一行的最大排名列,然后将 df2 的每一行中的该列移动到 df2 中的 maxRankVal2 列。

import pandas as pd
import numpy as np

np.random.seed(4)
df1 = pd.DataFrame(np.random.randn(3,3),columns=list('ABC'))
df2 = pd.DataFrame(np.random.randn(3,3),columns=list('ABC'))
df2['maxRankCol1'] = pd1.idxmax(axis=1)
df2['maxRankVal1'] = pd1.max(axis=1)
temp = pd2[pd2['maxRankCol1']]
#df2['maxRankVal2'] = pd2[pd2['maxRankCol1']] # This statement does not work
df2.insert(3,'maxRankVal2',0) # add Expected Results Column
print(df2.head(4))

df2 Expected Results
      A       B       C   maxRankVal2 maxRankCol1 maxRankVal1
0 -1.1474  0.6186 -0.0879   0.6186        B        0.499951
1  0.4250  0.3322 -1.1568   0.4250        A        0.693599
2  0.3509 -0.6068  1.5469  -0.6068        B        0.598575

标签: pandascopy

解决方案


import pandas as pd
import numpy as np

np.random.seed(0)
pd1 = pd.DataFrame(np.random.randn(100,6),columns=list('ABCDEF'))
pd2 = pd.DataFrame(np.random.randn(100,6),columns=list('ABCDEF'))

pd2['maxColumn'] = pd1.max().sort_values()[-1:].index.values[0]
pd2['maxValue'] = pd1.max().sort_values()[-1:][0]

print(pd2[['maxColumn', 'maxValue']].head(1))
  maxColumn  maxValue
0         C  2.696224

推荐阅读