如何在Python2.7中基于条件转置特定列

2024-03-29 05:47:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我在一个文件中有以下数据格式:

ID,var_name,var_value
1,ABC,This is abc1
1,DEF,This is def1
2,ABC,This is abc2
2,DEF,This is def2
2,GHI,This is ghi2
3,ABC,This is abc3
4,ABC,This is abc4
4,DEF,This is def4

我还有一个标题列表=['ABC','GHI']

在上面的数据集中,每个“ID”不一定包含所有的变量,但是ID:2包含了最大数量的变量(ABC、DEF、GHI)。我需要将上述数据集转换为以下嵌套列表格式:

^{pr2}$

这意味着清单应:

  • 填充所有ID的数据
  • 为上述数据集中不存在的变量创建空字符串。在
  • 填充嵌套列表,保持与标题列表相同的顺序
  • 只填充那些标题值,即标题列表只包含值“ABC”和“GHI”,因此嵌套列表只应填充值“ABC”和“GHI”,并应忽略上述数据集中的“DEF”行。在

我想在python2.7中使用Pandas。在


Tags: 文件数据nameid标题列表isvalue
3条回答

使用:

L = ['ABC','GHI']

df1 = df.pivot('ID', 'var_name', 'var_value').fillna('')[L].reset_index()
print (df1)
var_name  ID           ABC           GHI
0          1  This is abc1              
1          2  This is abc2  This is ghi2
2          3  This is abc3              
3          4  This is abc4     

L1 = [df1.columns.tolist()] + df1.values.tolist()
print (L1)

[['ID', 'ABC', 'GHI'], 
 [1, 'This is abc1', ''], 
 [2, 'This is abc2', 'This is ghi2'],
 [3, 'This is abc3', ''], 
 [4, 'This is abc4', '']]

说明

  1. 首先^{},将NaNs替换为^{},转换用于筛选列的子集,并通过^{}从索引创建列
  2. 上次创建嵌套列表和最后插入列名称

编辑:

我尝试更改列表中值的顺序:

^{pr2}$

或者,您可以只设置multiindexunstack

In []:
L = ['ABC', 'GHI']
df = df.set_index(['ID', 'var_name'])['var_value'].unstack(fill_value='')[L].reset_index()
df

Out[]:
var_name  ID           ABC           GHI
0          1  This is abc1              
1          2  This is abc2  This is ghi2
2          3  This is abc3              
3          4  This is abc4              

In []:
[df.columns.tolist()] + df.values.tolist()

Out[]:
[['ID', 'ABC', 'GHI'],
 [1, 'This is abc1', ''],
 [2, 'This is abc2', 'This is ghi2'],
 [3, 'This is abc3', ''],
 [4, 'This is abc4', '']]

我觉得你应该试着呆在这个漂亮的熊猫的数据框里

df2=(df.pivot(index='ID', columns='var_name', values='var_value')
     .fillna('').drop('DEF', axis=1).reset_index())



#output:
var_name  ID           ABC           GHI
0          1  This is abc1              
1          2  This is abc2  This is ghi2
2          3  This is abc3              
3          4  This is abc4                

但是,您还可以做进一步的工作来获得列表:

^{pr2}$

相关问题 更多 >