在python pandas中,从这个框架A到框架B的最简单的可读性好的方法是什么?
数据框A:
| | 流|意外| accidental |
| --|--|--|--|
| 0 |一|2.33349|主要|
| 1 |A编号|3.0565|轻微|
| 2 |B| 2.52871|主要|
| 3 |C#语言|3.02007|轻微|
| 4 |D| 2.76289|主要|
| 5 |D编号|2.57981|轻微|
| 6 |E|二点五三六五一|主要|
| 7 |F| 2.48089|主要|
| 8 |F编号|2.58316|轻微|
| 9 |G| 2.44892|主要|
| 10 |G编号|2.7892|轻微|
数据框B:
| 关键|主要河流|支流|
| --|--|--|
| 一|2.33349| 3.0565|
| B| 2.52871|楠|
| C|楠|3.02007|
| D| 2.76289| 2.57981|
| E|二点五三六五一|楠|
| F| 2.48089| 2.58316e |
| G| 2.44892| 2.7892|
我的解决方案是使用groupby聚合将流和accidentals合并到列表中。我还去掉了“key”元素中的“#”,以便能够使用groupby。
df_agg = df_agg.groupby('key').agg({'streams': list, 'accidental' : list})
major,minor = streams_split(df_agg['streams'].to_list(), df_agg['accidental'].to_list())
test = pd.DataFrame({'major_streams': major, 'minor_streams': minor }, index =df_agg.index)
然后,我有一个单独的助手函数,streams_split,手动将'streams'分为主要和次要的python列表并返回它们。然后使用新的列表将它们再次组合成一个新的框架。似乎有点矫枉过正和混乱的解决方案。我想知道是否有人有更好的解决方案。谢谢你的时间!
3条答案
按热度按时间goucqfw61#
验证码
首先,从键列中删除'#',然后创建一个透视表。
我使用
rename
函数将列名更改为您想要的名称。产出:
示例
y0u0uwnf2#
下面是使用
groupby
的简单方法,并进行了一些重新整形:输出量:
ego6inou3#
看起来像是一个
crosstab
的工作:输出量: