Python 3.x 根据给定的键重新构造数据帧
我正在处理一个数据集,经过所有的清理和重组后,我发现数据集如下所示Python 3.x 根据给定的键重新构造数据帧,python-3.x,pandas,pandas-groupby,Python 3.x,Pandas,Pandas Groupby,我正在处理一个数据集,经过所有的清理和重组后,我发现数据集如下所示 import pandas as pd df = pd.read_csv('data.csv', dtype={'freq_no': object, 'sequence': object, 'field': object}) print(df) CSV网址: 我想重组上面的结构,使它看起来像下面 import pandas as pd df = pd.read_csv('data.csv', dtype={'freq_no
import pandas as pd
df = pd.read_csv('data.csv', dtype={'freq_no': object, 'sequence': object, 'field': object})
print(df)
CSV网址:
我想重组上面的结构,使它看起来像下面
import pandas as pd
df = pd.read_csv('data.csv', dtype={'freq_no': object, 'sequence': object, 'field': object})
print(df)
逻辑:
id year period freq_no sequence file_date data_date 05210 \
0 abcdefghi 2018 A 001 001 20180605 20180331 200.0
1 abcdefghi 2018 A 001 001 20180605 20180330 NaN
05220 05230 combined_note deleted
0 NaN NaN {05210_B:ABC}{05210_U:DEFF} note{05210_U:DEFF} #because for note 05210_U:DEFF the trans_type was D
1 200.0 100.0 {05220_U:xyz}{05230_U:lmn} note{05220_U:xyz}|05230 #because for note {05220_U:xyz} trans_type is D, we also show field (05230) here separated by pipe because for that row the trans_type is D
id、年份、期间、频率、序列、数据和日期作为键(groupby?)
字段
成为列,此列的值为值
注释
(对于相同的键),创建一个组合注释
列deleted
列,该列将显示根据交易类型D
删除的注释
或值
id year period freq_no sequence file_date data_date 05210 \
0 abcdefghi 2018 A 001 001 20180605 20180331 200.0
1 abcdefghi 2018 A 001 001 20180605 20180330 NaN
05220 05230 combined_note deleted
0 NaN NaN {05210_B:ABC}{05210_U:DEFF} note{05210_U:DEFF} #because for note 05210_U:DEFF the trans_type was D
1 200.0 100.0 {05220_U:xyz}{05230_U:lmn} note{05220_U:xyz}|05230 #because for note {05220_U:xyz} trans_type is D, we also show field (05230) here separated by pipe because for that row the trans_type is D
我认为这可以通过使用
键上的设置索引,然后重新构造其他列来实现,但我无法获得所需的输出。因此我不得不通过合并来完成。
逻辑步骤:
按除注释和值以外的所有字段对数据帧进行分组。这是为了保护字段和事务列不受聚合的影响
添加已删除的列
包含注释聚合的第一个数据帧(也已删除)
将字段和值转换为多列的第二个数据帧
合并索引上的第一个和第二个数据帧李>
代码:
输出:
final
id year period freq_no sequence data_date file_date 05210 05220 05230 combined_note deleted
0 abcdefghi 2018 A 001 001 20180330 20180605 NaN 200.0 100.0 {05220_U:xyz}{05230_U:lmn} {05220_U:xyz}
1 abcdefghi 2018 A 001 001 20180331 20180605 200.0 NaN NaN {05210_B:ABC}{05210_U:DEFF} {05210_U:DEFF}
谢谢你的回答。它在给定的数据集上工作,但在此数据集上失败。如果将第三行中的freq\u no
替换为001
,则其工作正常。我不知道这里出了什么问题。我看到的唯一区别是第一行有一个NaN,到底出了什么问题?正确,但在使用运行代码时,我得到了这个错误ValueError:无法在未指定级别和名称重叠的情况下加入。我同时在python2.7和python3.5上运行,无法重现您的错误。输出:我在pandas 0.20.0上得到错误。我没有在0.22.0上注意到它。