给定行索引,有没有办法在 Pandas DataFrame 中合并行?

Is there a way to combine rows in a Pandas DataFrame, given the row index?

我希望将第 2 行与第 0 行合并,以便行的单位是列 header 的一部分,而不是在数据点之后。数据来自这种格式的 .csv 文件,但如果单位在 header 中,使用起来会容易得多。该单位并不总是“mi/h”,并且可以在任何给定的参考文件中更改。这些部分是从包含许多不同格式表格的较大 .csv 文件中提取的。我的最终目标是将每个部分单独导出到它自己的 .csv 文件中。这已经在工作,但我希望如上所述调整数据,然后继续将其导出到自己的 .csv 文件。

0 Avg Wind Speed       Gust Speed           Min Wind Speed     
1                 5.26                10.74                 1.34
2                 mi/h                 mi/h                 mi/h

理想情况下,输出如下所示:

0 Avg Wind Speed (mi/h)       Gust Speed (mi/h)           Min Wind Speed (mi/h)     
1                 5.26                10.74                 1.34
df.columns=[c+"("+str(df.loc[2,c])+")" for c in df.columns]

通过添加第二行和相应列的值(转换为字符串)重命名所有列。

df.loc[0,:]=[str(df.loc[0,c])+str(df.loc[2,c]) for c in df.columns ]

此解决方案编辑的是第一行而不是列,不确定您想要哪一个。

从第 0 行和第 2 行创建一个 df header

import pandas as pd

# given your sample data
data = {0: ['Avg Wind Speed', '5.26', 'mi/h'], 
        1: ['Gust Speed', '10.74', 'mi/h'],
        2: ['Min Wind Speed', '1.34', 'mi/h']}

df = pd.DataFrame(data)

                0           1               2
0  Avg Wind Speed  Gust Speed  Min Wind Speed
1            5.26       10.74            1.34
2            mi/h        mi/h            mi/h

# create the new header from row 0 and 2
header = (df.iloc[0, :] + ' ('+ df.iloc[2, :] + ')').to_list()

# if there can be whitespace or floats, use the following line for header
header = (df.iloc[0, :].astype(str).str.strip() + ' ('+ df.iloc[2, :].astype(str).str.strip() + ')').to_list()

['Avg Wind Speed (mi/h)', 'Gust Speed (mi/h)', 'Min Wind Speed (mi/h)']

# set as header
df.columns = header

# delete row 0 and 2
df = df.drop(labels=[0, 2])

# final df
  Avg Wind Speed (mi/h) Gust Speed (mi/h) Min Wind Speed (mi/h)
1                  5.26             10.74                  1.34

写入新行 0

# overwrite row 0
df.iloc[0] = header

# delete row 2
df = df.drop(labels=[2])

# final df
                       0                  1                      2
0  Avg Wind Speed (mi/h)  Gust Speed (mi/h)  Min Wind Speed (mi/h)
1                   5.26              10.74                   1.34

如果正在更新 header 而不是 row0 和 row2

data = {'Avg Wind Speed': ['5.26', 'mi/h'],
        'Gust Speed': ['10.74', 'mi/h'],
        'Min Wind Speed': ['1.34', 'mi/h']}

df = pd.DataFrame(data)

  Avg Wind Speed Gust Speed Min Wind Speed
0           5.26      10.74           1.34
1           mi/h       mi/h           mi/h

# get values from row 1
row1 = df.iloc[1].tolist()

# update the column headers
df.columns = [f'{c} ({row1[i]})' for i, c in enumerate(df.columns)]

# drop row 1
df = df.drop(labels=[1])

# final df
  Avg Wind Speed (mi/h) Gust Speed (mi/h) Min Wind Speed (mi/h)
0                  5.26             10.74                  1.34