亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

刪除列并為每個刪除的列 Pandas Dataframe 創建唯一的行

刪除列并為每個刪除的列 Pandas Dataframe 創建唯一的行

精慕HU 2022-12-20 16:32:45
這是我遇到的一個非常棘手的問題,它正在抨擊我的內存管理,這是設置:我有一個具有以下列設置的數據框:Unique1 Unique2 Unique3 d_1 d_2 d_3..... d_2000   A       B      C      1   4   0         100我想刪除 d_1...d_2000 列,而是為每個條目設置一個唯一的行:Unique1 Unique2 Unique3 d_index d_value   A       B       C      d_1     1   A       B       C      d_2     4   A       B       C      d_3     0   .   .   .   A       B       C      d_2000  100下面的代碼給了我一個 2 dim 系列,它可以被壓縮回一個數據幀,但是因為我需要使用一些工作變量,所以它在 linux 上很快用完了 32gb 的 ram(在 windows env 上工作,但速度很慢) :def convert_timeseries_to_rows(row):    d_idx = 1    rows_to_return = []    for day_count in row[6:]: ### d columns start from 6        new = list(row[:6]) ### keep first 6 columns        day_string = "d_"+str(d_idx)        new.append(day_string)        new.append(day_count)        rows_to_return.append(new)        d_idx = d_idx + 1    return rows_to_return ### return all rows generated2_dim_series = df.apply(convert_timeseries_to_rows, axis=1)data = []columns = ['unique1', "unique2"..., 'date_index', 'units']for each in 2_dim_series :    for row in each:        data.append(dict(zip(columns,row)))data = pd.DataFrame(data)data.to_csv('save_to_disk.csv')任何專業人士都可以想到更好的方法來做到這一點(在 python 中)嗎?謝謝!示例輸入:Unique1 Unique2 Unique3 d_1 d_2 d_3   A       B      C      1   4   0    D       E      F      5   9   12 示例輸出:Unique1 Unique2 Unique3 d_index d_value   A       B       C      d_1     1   A       B       C      d_2     4   A       B       C      d_3     0   D       E       F      d_1     5   D       E       F      d_2     9   D       E       F      d_3     12
查看完整描述

2 回答

?
慕容森

TA貢獻1853條經驗 獲得超18個贊

Pandas 對此有一個解決方案:melt

df.melt(id_vars=['Unique1','Unique2','Unique3'],

        var_name='d_index',

        value_name='d_value')

 .sort_values('Unique1', ignore_index=True)



  Unique1   Unique2 Unique3 d_index d_value

0      A       B    C        d_1    1

1      A       B    C        d_2    4

2      A       B    C        d_3    0

3      D       E    F        d_1    5

4      D       E    F        d_2    9

5      D       E    F        d_3    12


查看完整回答
反對 回復 2022-12-20
?
猛跑小豬

TA貢獻1858條經驗 獲得超8個贊

我像這樣重新創建了數據框:


import pandas as pd

n = 2000

df = pd.DataFrame(columns=['Unique' + str(i) for i in range(1,4)] 

             + ['d_' + str(i) for i in range(n)], 

            data= [['A','B','C']  + np.random.randint(0,100,n).astype(str).tolist()],

                  index = [0])

然后確定您正在使用的列:


d_cols = df.columns[df.columns.str.contains('d_')]

u_cols = df.columns[df.columns.str.contains('Unique')]

然后生成第二個數據幀:


df2 = pd.DataFrame({'d_index':d_cols, 

                    'd_value': df[d_cols].values.flatten()})

for col in u_cols:

    df2[col] = df[col][0]


查看完整回答
反對 回復 2022-12-20
  • 2 回答
  • 0 關注
  • 148 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號