python - 如何转换每行可变列大小的数据框?

标签 python pandas

我有以下数据框:

ID      Code
5966856 A
5966856 B
5966857 A
5966854 A
5966854 B
5966854 C
6648070 A
6648074 A
6648075 B

我希望将其转换为:

ID      Code_1 Code_2 Code_3
5966856 A      B      NaN
5966857 A      NaN    NaN
5966854 A      B      C
6648070 A      NaN    NaN
6648074 A      NaN    NaN
6648075 B      NaN    NaN

我尝试了 groupby 和 pivot,但无论哪种情况,我都需要定义列,在我的例子中,这些列是可变的。 最大列数等于每个唯一 ID 的最大代码数。对于其余部分,我填充为 NaN。

最佳答案

使用:

  • 首先将列代码转换为列表每组
  • 然后使用DataFrame构造函数
  • 通过自定义函数重命名
  • reset_index来自 index
  • 的列

a = df.groupby('ID')['Code'].apply(list)
c = lambda x: 'Code_{}'.format(x+1)
df = pd.DataFrame(a.values.tolist(), index=a.index).rename(columns=c).reset_index()

备选方案:


a = df.groupby('ID')['Code'].cumcount().add(1).astype(str).radd('Code_')
df = df.set_index(['ID', a])['Code'].unstack().reset_index()

print (df)
        ID Code_1 Code_2 Code_3
0  5966854      A      B      C
1  5966856      A      B   None
2  5966857      A   None   None
3  6648070      A   None   None
4  6648074      A   None   None
5  6648075      B   None   None

关于python - 如何转换每行可变列大小的数据框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49152664/

相关文章:

python - TensorFlow独立使用CPU和GPU

python - get_current_session 返回 None

python - 在 python 中仅使用 for 循环模拟 while 循环

python - pandas 适用于追加总行

python - pandas 从数组中获取嵌套的字符串值

python - 有条件地更改每个索引和列中数据帧的值的最快方法是什么?

python - Windows错误 : [Error 740] The requested operation requires elevation even after disabling UAC

python - 关键字: is and == in python有什么区别

python - 如何更干净地分割 Pandas 中的数据?

python - 你如何将第一个有效值向左移动?