【发布时间】:2020-08-16 19:06:37
【问题描述】:
我有一个数据框,其中数据位于另一列中,我想从该列中获取这些日期并创建一个日期列并存储它们。这是我的示例数据。
df=[['Monday, 13 January 2020','',''],['Task 1',13588,'Jack'],['','','Address 1'],['','','City 1'],['Task 2',13589,'Ammie'],['','','Address 2'],['','','City'],['Task 3',13589,'Amanda'],['','','Address 3'],['','','City 3'],['Tuesday, 14 January 2020','',''],['Task 4',13587,'Chelsea'],['','','Address 4'],['','','City 4'],['Task 5','13586','Ibrahim'],['','','Address 5'],['','','City 5'],['Task 6',13585,'Kate'],['','','Address 6'],['','','City 6']]
df=pd.DataFrame(df)
df.columns = ['Task','ID','Supervisor']
df=df.replace(np.nan,'')
df
Task ID Supervisor
0 Monday, 13 January 2020
1 Task 1 13588 Jack
2 Address 1
3 City 1
4 Task 2 13589 Ammie
5 Address 2
6 City
7 Task 3 13589 Amanda
8 Address 3
9 City 3
10 Tuesday, 14 January 2020
11 Task 4 13587 Chelsea
12 Address 4
13 City 4
14 Task 5 13586 Ibrahim
15 Address 5
16 City 5
17 Task 6 13585 Kate
18 Address 6
19 City 6
我想得到以下输出。
Date Task ID Supervisor
0 Monday, 13 January 2020 Task 1 13588 Jack Address 1 City 1
1 Monday, 13 January 2020 Task 2 13589 Ammie Address 2 City
2 Monday, 13 January 2020 Task 3 13589 Amanda Address 3 City 3
3 Tuesday, 14 January 2020 Task 4 13587 Chelsea Address 4 City 4
4 Tuesday, 14 January 2020 Task 5 13586 Ibrahim Address 5 City 5
5 Tuesday, 14 January 2020 Task 6 13585 Kate Address 6 City 6
这是我的尝试。
def rowMerger(a,b):
try:
rule1 = lambda x: x not in ['']
u = a.loc[a.iloc[:,0].apply(rule1) & a.iloc[:,1].apply(rule1) & a.iloc[:,2].apply(rule1)].index
print(u)
findMergerindexs = list(u)
findMergerindexs.sort()
a = pd.DataFrame(a)
tabcolumns = pd.DataFrame(a.columns)
totalcolumns = len(tabcolumns)
b = pd.DataFrame(columns = list(tabcolumns))
if (len(findMergerindexs) > 0):
for m in range(len(findMergerindexs))
if not (m == (len(findMergerindexs)-1)):
startLoop = findMergerindexs[m]
endLoop = findMergerindexs[m+1]
else:
startLoop = findMergerindexs[m]
endLoop = len(a)
listValues = []
for i in range(totalcolumns):
value = ' '
for n in range(startLoop,endLoop):
value = value + ' ' + str(a.iloc[n,i])
listValues.insert(i,(value.strip()))
b = b.append(pd.Series(listValues),ignore_index = True)
else:
print("File is not having a row for merging instances - Please check the file manually for instance - ")
return b
except:
print("Error - While merging the rows")
return b
这段代码给了我下面的输出。
rowMerger(df,0)
0 1 2
0 Task 1 13588 Jack Address 1 City 1
1 Task 2 13589 Ammie Address 2 City
2 Task 3 Tuesday, 14 January 2020 13589 Amanda Address 3 City 3
3 Task 4 13587 Chelsea Address 4 City 4
4 Task 5 13586 Ibrahim Address 5 City 5
5 Task 6 13585 Kate Address 6 City 6
但问题是这段代码只会合并行。不确定如何在所需输出中显示的各行中复制日期并将其放在不同的列中。谁能帮助我实现这一目标?
【问题讨论】:
-
如何在您的第一个代码块的示例中使用 rowMerger(a,b)。 b是什么?
-
b 是函数返回的数据框。该函数有两个参数,数据框和 0。rowMerger(df,0) 将为我们提供我上面显示的结果。
标签: python pandas dataframe date conda