python - 将不同长度的列添加到 Pandas 数据框中

标签 python pandas dataframe

我有一个数据框,详细说明了几年来授予人们的钱:

Name -- Money -- Year
Paul    57.00    2012
Susan   67.00    2012
Gary    54.00    2011
Paul    77.00    2011
Andrea  20.00    2011
Albert  23.00    2011
Hal     26.00    2010
Paul    23.00    2010

根据这个数据框,我想构建一个数据框,详细说明一年内奖励的所有资金,用于制作箱线图:

2012 -- 2011 -- 2010
57.00   54.00   26.00
67.00   77.00   23.00
        20.00
        23.00

因此您会在不同长度的列中看到此结果。当我尝试使用 pandas 执行此操作时,出现错误 'ValueError: Length of values does not match length of index'。 我认为这是因为我无法向数据帧添加不同长度的列.

任何人都可以就如何进行提供一些建议吗?也许我正在错误地处理这个问题?感谢您的帮助!

最佳答案

我会分两步完成:首先使用 cumcount 添加对应于每年索引的列,然后 pivot 以便新的列是索引,年份成为列,货币列成为值:

df["yindex"] = df.groupby("Year").cumcount()
new_df = df.pivot(index="yindex", columns="Year", values="Money")

例如:

>>> df = pd.read_csv("money.txt", sep="\s+")
>>> df
     Name  Money  Year
0    Paul     57  2012
1   Susan     67  2012
2    Gary     54  2011
3    Paul     77  2011
4  Andrea     20  2011
5  Albert     23  2011
6     Hal     26  2010
7    Paul     23  2010
>>> df["yindex"] = df.groupby("Year").cumcount()
>>> df
     Name  Money  Year  yindex
0    Paul     57  2012       0
1   Susan     67  2012       1
2    Gary     54  2011       0
3    Paul     77  2011       1
4  Andrea     20  2011       2
5  Albert     23  2011       3
6     Hal     26  2010       0
7    Paul     23  2010       1
>>> df.pivot(index="yindex", columns="Year", values="Money")
Year    2010  2011  2012
yindex                  
0         26    54    57
1         23    77    67
2        NaN    20   NaN
3        NaN    23   NaN

如果你愿意,之后你可以去掉 NaN,但这取决于你是否想区分“知道值为 0”和“不知道值是什么”的情况:

>>> df.pivot(index="yindex", columns="Year", values="Money").fillna(0)
Year    2010  2011  2012
yindex                  
0         26    54    57
1         23    77    67
2          0    20     0
3          0    23     0

关于python - 将不同长度的列添加到 Pandas 数据框中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23929070/

相关文章:

python - 我们如何在 SMOTE 中设置比率以使正样本多于负样本?

python - 使用 pandas 将表中不同值出现的计数值作为新列添加到表中

r - Advanced R 中修改列表的示例

python - 类型错误 ' list indices must be integers or slices, not tuple'(第 6 行)

python - 过滤掉字符串匹配之前的所有行

python - 计算两个日期之间的差异 MySQL/Python

python - 如何计算 Pandas 系列中重复出现的相同值

python - 按索引值将 pandas Series 拆分为连续的 block

python - pandas:使用运算符链接过滤 DataFrame 的行

python - 如何在 python 中解析 CLI 命令输出(表)?