折叠Pandas Python中列中的某些行

用户名

我在Pandas中有一个Dataframe,如下所示:

            ID  rating     G1     G2     G3     G4  G5  G6  G7
0           1     2.5     18      0      0      0   0   0   0
1           4     4.0     18      0      0      0   0   0   0
2           7     3.0     78      1      0      0   0   0   0
3           1     4.0     21      7      8     10  30  40  20
4          21     3.0     18      0      0      0   0   0   0
5           7     2.0     18      80     10    11   8   0   0
6          41     3.5     18      0      9     10   0   0   0

我想通过ID来组合所有元素,以便在熊猫中获得一种具有以下行数组条目的continuos数据帧:

            ID    H1      H2                        
0           1   [2.5,18]  [4.0,21,7,8,10,30,40,20]  
1           4   [4.0,18]  Nan                       
2           7   [3.0,78]  [2.0, 18, 80, 10, 11,8]   
3          21   [3.0,18]  Nan   
4          41   [3.5,18,76,9,10] Nan

你知道有可能吗?谢谢

马那金

抱歉-早些参加会议:这就是我要解决的问题:

df1 = df.groupby([df.index, "ID"]).agg(
lambda x: x.replace(0, np.nan).dropna().tolist())
# Create a sum of each list
df1['list_'] = df1.sum(axis=1)
print(df1['list_'])
    0                      [2.5, 18]
1                          [4.0, 18]
2                       [3.0, 78, 1]
3    [4.0, 21, 7, 8, 10, 30, 40, 20]
4                          [3.0, 18]
5           [2.0, 18, 80, 10, 11, 8]
6                   [3.5, 18, 9, 10]
Name: list_, dtype: object
然后创建带有累加计数的计数器列,并使用交叉表进行数据透视。
# Create a row to use for columns
df1['count'] = 'H' + (df1.groupby('ID').cumcount() + 1).astype(str)

df1.reset_index(level=1,inplace=True)

final_ = pd.crosstab(df1["ID"], 
        df1["count"], 
        values=df1["list_"], 
        aggfunc="first").reset_index()

print(final_)


        ID                H1                              H2
0       1         [2.5, 18]  [4.0, 21, 7, 8, 10, 30, 40, 20]
1       4         [4.0, 18]                              NaN
2       7      [3.0, 78, 1]         [2.0, 18, 80, 10, 11, 8]
3      21         [3.0, 18]                              NaN
4      41  [3.5, 18, 9, 10]                              NaN

我唯一可以看到的痛点是我的list_列是一个对象,不确定是否稍后会对其进行进一步的操作。如果这样,Jezrael的解决方案将更合适。

编辑遇到此问题的其他人:

使用python的方法.sum()是最慢的列表连接方法之一,如果要考虑性能,请参阅:如何从列表列表中制作一个平面列表

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

根据条件折叠 pandas df 中的行

Python Pandas,检查一行中某些列的条件?

将某些行中的列折叠为R中列数最少的行

python / pandas折叠列作为datetime季度

折叠python pandas数据框中的重叠日期

Python:基于某些行appers的pandas数据框中的两列(变量)获得频率计数

使用每列不同的逻辑折叠 Pandas 数据框中的行

如果所有行的列中只有一个值,则在Pandas数据框中折叠行

在 Pandas 管道中的 pivot() 之后折叠多索引

标准化Python Pandas数据框中的某些列?

Python pandas 仅在某些列中移空

Pandas - 折叠单元格值上的行但保留顺序

如何根据 Pandas 中的列值仅从某些列中获取行?

折叠 R 中的行

如何检查 Python 中的某些东西是否是 x 折叠的?

将pandas数据框中的每个组的多列折叠为一组的python方法是什么?

Python Pandas,删除列中增加的行

如何更改 Pandas 中多索引数据帧列中某些行的值

R中的折叠列

Python将map调用中的“ pandas.core.series.Series”列表折叠成数据框

基於其他列的某些列中每一行的 Pandas

Pandas 替换每列中的某些值

按日期计算某些行的平均值并在 Python pandas 中创建新行

如何根据其他列中的数据替换python pandas中的某些值?

从仅某些列具有相同值的Pandas数据框中删除重复的行

如何用Pandas DataFrame中的共享列值替换某些行?

在不知道列和行的情况下替换pandas Dataframe中的某些值

提取行,其中列的列表在pandas数据框中包含某些值

pandas:根据某些列和行中的条件划分数据框