【问题标题】:break down pandas dataframe column into multiple columns in a single df将 pandas 数据框列分解为单个 df 中的多列
【发布时间】:2018-02-19 19:57:59
【问题描述】:

我有一个包含索引、特征和时间数据的数据框,但时间数据在这样的一列中:

身份证日期功能

1 日期1 特征1

2 日期2 特征2

1 日期2 特征3

我想把它变成这样:

身份证日期功能

1 日期1 特征1 日期2 特征3

2 date2 feature2 NaN NaN

已经通过显式定义数据帧、查询和连接来做到这一点,但未能找到动态方式。我写的:

df = pd.read_excel('some path')

import pandas as pd

list1 = []
list2 = []
list3 = []

def placeholder_lists():
    for i in range(7):
        if len(str(i)) == 1:
            if i not in [8,9]:
                i = "0"+str(i+3)
            else:
                i = str(i+3)
        else:
            i = str(i+3)
        list1.append(i)

    for l in range(7):
        if len(str(l)) == 1:
            if l not in [10,9]:
                l = "0"+str(l+2)
            else:
                l = str(l+2)
        else:
            l = str(l+2)
        list2.append(l)

    for g in range(7):
        if len(str(g)) == 1:
            if g not in [9,8]:
                g = "0"+str(g+1)
            else:
                g = str(g+1)
        else:
            g = str(g+1)
        list3.append(g)

placeholder_lists()

for m,n,u in zip(list1,list2, list3):
    df01 = df.query('dw_creation_date == "01-AUG-17" ')
    e = str(u)+"-AUG-17"

    currentdf = df.query('dw_creation_date == "%s"' % e)

    if 1 == "01":
        currentdf = df01
    first = "df"+m
    second = "df"+n
    listie = range(50)
    first = second.join(currentdf.set_index('unique_identifier'), on='unique_identifier', lsuffix = listie[n])

...我得到的错误:

first = second.join(currentdf.set_index('unique_identifier'), lsuffix = listie[n])

TypeError: join() 没有关键字参数

有什么想法吗?

【问题讨论】:

  • second 是字符串"dfm",而不是数据框

标签: python pandas data-processing


【解决方案1】:
cols = ['id','date','feature']
df = pd.DataFrame({'date': {0: 'date1', 1: 'date2', 2: 'date2'}, 
                   'id': {0: 1, 1: 2, 2: 1}, 
                  'feature': {0: 'feature1', 1: 'feature2', 2: 'feature3'}}, columns=cols)

print (df)
   id   date   feature
0   1  date1  feature1
1   2  date2  feature2
2   1  date2  feature3

您可以通过idgroupby 并申请新的df。 然后在Multiindex 的第二级中通过unstack 重塑并按sort_index 对列进行排序。

最后一次展平列中的Multiindexreset_index

df = df.groupby('id')['date','feature'] \
       .apply(lambda x: pd.DataFrame(x.values, columns=['feature','date'])) \
       .unstack() \
       .sort_index(1, level=1)

print (df)
   feature      date feature      date
         0         0       1         1
id                                    
1    date1  feature1   date2  feature3
2    date2  feature2    None      None


df.columns = ['{0[0]}_{0[1]}'.format(x)  for x in df.columns]
df = df.reset_index()
print (df)
   id feature_0    date_0 feature_1    date_1
0   1     date1  feature1     date2  feature3
1   2     date2  feature2      None      None

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-13
    • 1970-01-01
    • 2017-08-29
    • 2021-07-13
    • 2020-07-23
    • 2022-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多