熊猫根据其他列的值移动到对应列

Posted

技术标签:

【中文标题】熊猫根据其他列的值移动到对应列【英文标题】:pandas move to correspondent column based on value of other column 【发布时间】:2020-04-13 04:26:01 【问题描述】:

我正在尝试根据 f1_ty、f2_ty、f3_ty 的值将 f1_am、f2_am、f3_am 移动到对应的列

我开始使用集合根据 _ty 中的唯一值向数据框添加新列,但我试图弄清楚如何将 _am 值移动到它所属的位置

寻找 group by 和 pivot 的选项,但结果让我大吃一惊....

我将不胜感激。

代码下方。

import pandas as pd 
import numpy as np
data =  
  'mem_id': ['A', 'B', 'C', 'A', 'B', 'C']
, 'date_inf': ['01/01/2019', '01/01/2019', '01/01/2019', '02/01/2019', '02/01/2019', '02/01/2019'] 
, 'f1_ty': ['ABC', 'ABC', 'ABC', 'ABC', 'GHI', 'GHI'] 
, 'f1_am': [100, 20, 57, 44, 15, 10] 
, 'f2_ty': ['DEF', 'DEF', 'DEF', 'GHI', 'ABC', 'XYZ'] 
, 'f2_am':[20, 30, 45, 66, 14, 21]
, 'f3_ty': ['XYZ', 'GHI', 'OPQ', 'OPQ', 'XYZ', 'DEF'] 
, 'f3_am':[20, 30, 45, 66, 14, 21]




df = pd.DataFrame (data) 

#distinct values in columns using sets
distinct_values = sorted(list(set(df['f1_ty'])|set(df['f2_ty'])|set(df['f3_ty'])))


# add distinct values as new columns in the DataFrame
new_df = df.reindex(columns = np.append( df.columns.values, distinct_values))

所以这将是我的起点和我想要的结果。

【问题讨论】:

您是否需要:m=df.set_index(['mem_id','date_inf']),然后是m[sorted(m.columns,key=lambda x:x.split('_')[1])].reset_index()评论,因为我的要求不是很清楚 添加图片更清晰 【参考方案1】:

这是一个尝试,感谢有趣的问题(重命名 colujmns 以使其与wide_to_long() 兼容,然后是unstack()dropping 额外级别:

m=df.set_index(['mem_id','date_inf']).rename(columns=lambda x: ''.join(x.split('_')[::-1]))
n=(pd.wide_to_long(m.reset_index(),['tyf','amf'],['mem_id','date_inf'],'v')
.droplevel(-1).set_index('tyf',append=True).unstack(fill_value=0).reindex(m.index))

final=n.droplevel(0,axis=1).rename_axis(None,axis=1).reset_index()
print(final)

  mem_id    date_inf  ABC  DEF  GHI  OPQ  XYZ
0      A  01/01/2019  100   20    0    0   20
1      B  01/01/2019   20   30   30    0    0
2      C  01/01/2019   57   45    0   45    0
3      A  02/01/2019   44    0   66   66    0
4      B  02/01/2019   14    0   15    0   14
5      C  02/01/2019    0   21   10    0   21

【讨论】:

谢谢你,我会永远保持wide_to_long在附近。 我只有一个问题,当其中一个资金重复时,我得到这个错误 ValueError: Index contains duplicate entries, cannot reshape,

以上是关于熊猫根据其他列的值移动到对应列的主要内容,如果未能解决你的问题,请参考以下文章

循环遍历熊猫表,按条件更改其他列的值

熊猫通过根据另一列的值添加列级别来重塑数据框[重复]

根据索引在熊猫数据框中查找特定列的值[重复]

如何根据列的值对熊猫数据框中的列进行分类?

如何使用熊猫根据列的值范围分离数据框?

根据另一列的值修改熊猫中的日期时间列