如何使用Pandas单元格合并

3

I want to combine the cells as follows.

Before:

|   | test1 | test2 | test3 |
| -:|:----- |:----- | -----:|
| 0 | value | value | value |
| 1 | test4 | test5 |
| 2 | value | value |
| 3 | test6 | test7 | test8 |
| 4 | value | value | value |
| 5 | test9 | test0 |
| 6 | value | value |

之后:

|   | test1 | test2 | test3 | test4 | test5 | test6 | test7 | test8 | test9 | test0 |
| -:|:----- |:----- | ----- |:----- |:----- |:----- |:----- |:----- |:----- | -----:|
| 0 | value | value | value | value | value | value | value | value | value | value |

我想用Python和pandas的帮助更改单元格,请求协助。谢谢。
2个回答

2

以下是您可以做的事情。

import pandas as pd

df = pd.DataFrame({'test1 ':['15','test4','79', 'test6', '34', 'test9', '323'],
                   'test2 ':['78','test5','45', 'test7', '4', 'test10', '34'],
                   'test3 ':['8','','', 'test8', '56', '', '']})
print("Original Dataframe")
print(df)

df1 = pd.DataFrame()
col_names = []
col_names = df.iloc[1::2, :].to_numpy('str').tolist()
row_values = df.iloc[2::2, :].to_numpy('str').tolist()
col_names = [j for sub in col_names for j in sub if j!= '']
row_values = [j for sub in row_values for j in sub if j!= '']
df1 = pd.DataFrame([row_values], columns= col_names)
print("Dataframe 1")
print(df1)

df2 = df.iloc[[0, ]]
print("Dataframe 2")
print(df2)

df3 = pd.concat([df2, df1], axis=1)
print("Dataframe Result")
print(df3)

df1 包含了除第一行以外的所有数据。 df2 仅包含原始列和第一行数据。最后,您可以将 df1和df2 连接起来形成 df3
这将给出以下输出:

Original Dataframe
  test1   test2  test3 
0     15      78      8
1  test4   test5       
2     79      45       
3  test6   test7  test8
4     34       4     56
5  test9  test10       
6    323      34       
Dataframe 1
  test4 test5 test6 test7 test8 test9 test10
0    79    45    34     4    56   323     34
Dataframe 2
  test1  test2  test3 
0     15     78      8
Dataframe Result
  test1  test2  test3  test4 test5 test6 test7 test8 test9 test10
0     15     78      8    79    45    34     4    56   323     34

谢谢,我会尝试的。 - user1082164

2

从第一行切片并使用melt进行预处理,得到系列s。对于列,切片偶数行;对于值,切片奇数行,并从这些列和值构建新的数据框。最后,将其连接到原始数据框的第0行。

Sample df:
    test1   test2   test3
0  value1  value2  value3
1   test4   test5     NaN
2  value4  value5     NaN
3   test6   test7   test8
4  value6  value7  value8
5   test9   test0     NaN
6  value9  value0     NaN

s = df.iloc[1:].melt().dropna()['value']
cols = s[0::2].tolist()
vals = s[1::2].tolist()
df_final = df.iloc[[0]].join(pd.DataFrame([vals], columns=cols)).sort_index(1)

Out[140]:
    test0   test1   test2   test3   test4   test5   test6   test7   test8  \
0  value0  value1  value2  value3  value4  value5  value6  value7  value8

    test9
0  value9

1
谢谢,我会尝试的。 - user1082164

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接