pandas中的一行上有多条记录

3qpi33ja  于 2023-05-15  发布在  其他
关注(0)|答案(3)|浏览(118)

假设我有一个pandas数据框,它在同一行上存储了多条记录,如下所示
| ID1| ID2| ID3|值A1|值A2|值A3|值B1|值B2|值B3|
| --------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------|
| 1|二|三|X型|Y| Z轴|一个|B| C类|
| 二|1|三|P| Q| U| S型|V| M型|
我正在寻找一个通用的(任意数量的ID和和相关值)的方式来堆叠这些记录,使我有
| 身份证|值A|值B|
| --------------|--------------|--------------|
| 1| X型|一个|
| 二|Y| B|
| 三|Z轴|C类|
| 二|P| S型|
| 1| Q| V|
| 三|U| M型|

z3yyvxxp

z3yyvxxp1#

另一种可能的解决方案:

pd.lreshape(df, {
    'id': ['id1', 'id2', 'id3'], 
    'valueA': ['valueA1', 'valueA2', 'valueA3'], 
    'valueB': ['valueB1', 'valueB2', 'valueB3']})

或者:

pd.lreshape(df, {
    'id': df.filter(like='id').columns.tolist(), 
    'valueA': df.filter(like='valueA').columns.tolist(), 
    'valueB': df.filter(like='valueB').columns.tolist()})

输出:

id valueA valueB
0   1      X      A
1   2      P      S
2   2      Y      B
3   1      Q      V
4   3      Z      C
5   3      U      M
2vuwiymt

2vuwiymt2#

您可以生成MultiIndex和stack

(df.set_axis(pd.MultiIndex.from_frame(df.columns.str.extract('(.*)(\d+)$')),
             axis=1)
 .stack()
 #.reset_index(drop=True).rename_axis(columns=None) # optional
)

输出:

0    id valueA valueB
  1                  
0 1   1      X      A
  2   2      Y      B
  3   3      Z      C
1 1   2      P      S
  2   1      Q      V
  3   3      U      M
qlckcl4x

qlckcl4x3#

下面是使用pd.wide_to_long()的方法

df = (pd.wide_to_long(df.reset_index(),
                      i='index',j='t',
                      stubnames=['id','valueA','valueB'],
                      suffix=r'.*')
                      .reset_index(drop=True))

输出:

id valueA valueB
0   1      X      A
1   2      P      S
2   2      Y      B
3   1      Q      V
4   3      Z      C
5   3      U      M

相关问题