python-3.x - 根据两列中的值 reshape Pandas 数据框

标签 python-3.x pandas dataframe

在 Python 中,我想使用两个可能的路径搜索数据框中的所有行(数据框由 csv 文件填充)。如果给定行的“组”列为零,则使用“Channel_1”和“Data_1”列将该行的数据移动到新数据帧的下一行。如果给定行的“组”列非零,则获取具有相同“组”列值的所有三行(也由“子组”列标识为 1、2 或 3)并添加到下一个新数据框的行。

从 csv 文件生成数据框的代码:

for name in glob.glob(search_string):
    r_file = pd.read_csv(name)

当前数据格式:

Channel_Num    Group    Sub_Group    Data
1000            1        1            100
1001            1        2            105
1002            1        3            110
1003            0        0            200
1004            2        1            400
1005            2        2            405
1006            2        3            410
1007            0        0            500

所需的数据格式:

Group    Channel_1    Data_1    Channel_2   Data_2   Channel_3   Data_3
1         1000         100       1001        105      1002        110
0         1003         200       NaN         NaN      NaN         NaN   
2         1004         400       1005        405      1006        410
0         1007         500       NaN         NaN      NaN         NaN

我尝试了 GroupBy 和 pivot_table 方法但没有成功。数据采用所需格式后,还需要针对新组织的数据运行其他计算,但关键是将其采用所需格式。

最佳答案

这更像是使用 diffcumsum 创建附加键后的数据透视问题,所以我使用 pivot_table 和多列展平

df.loc[df.Sub_Group==0,'Sub_Group']=1
df['newkey']=df.Group.diff().ne(0).cumsum()
s=df.pivot_table(index=['Group','newkey'],columns=['Sub_Group'],values=['Channel_Num','Data'],aggfunc='first').sort_index(level=1,axis=1)
s.columns=s.columns.map('{0[0]}_{0[1]}'.format) 
s.reset_index(level=0).sort_index()
Out[25]: 
        Group  Channel_Num_1  Data_1   ...    Data_2  Channel_Num_3  Data_3
newkey                                 ...                                 
1           1         1000.0   100.0   ...     105.0         1002.0   110.0
2           0         1003.0   200.0   ...       NaN            NaN     NaN
3           2         1004.0   400.0   ...     405.0         1006.0   410.0
4           0         1007.0   500.0   ...       NaN            NaN     NaN
[4 rows x 7 columns]

关于python-3.x - 根据两列中的值 reshape Pandas 数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55458205/

相关文章:

python - 更有效地拆分列

list - python : create a pandas data frame from a list

python - 如何设置 django 1.8 以使用 jinja2?

python-3.x - 在Python上计算字符串的宽度/高度

python - 设置分析: create pandas series with intersections as index and values as counts

python - DataFrame 计算平均购买价格

python - 使用方程和日平均值标准化 pandas 数据框列

python - 如何在给定日期时间值限制下填充数据框中的列?

list - 将数字输入到空列表 Python

python - 错误绑定(bind)参数 0 : probably unsupported type