Python 重新排列熊猫中的数据帧 下面是我的数据框: 总班次 MS:早班 ES:夜班 11,22,33是员工id
数据帧:Python 重新排列熊猫中的数据帧 下面是我的数据框: 总班次 MS:早班 ES:夜班 11,22,33是员工id,python,python-2.7,pandas,dataframe,Python,Python 2.7,Pandas,Dataframe,数据帧: Day Date GS MS ES 0 Monday 20/02/2017 11 22 33 1 Tuesday 21/02/2017 22 11 33 2 Wednesday 22/02/2017 33 22 11 我想把那个数据帧转换成下面的模式 20/02/2017 21/02/2017 22/02/2017 Monday Tuesday W
Day Date GS MS ES
0 Monday 20/02/2017 11 22 33
1 Tuesday 21/02/2017 22 11 33
2 Wednesday 22/02/2017 33 22 11
我想把那个数据帧转换成下面的模式
20/02/2017 21/02/2017 22/02/2017
Monday Tuesday Wednesday
0 11 GS MS ES
1 22 ES GS MS
2 33 MS ES GS
因此,我尝试根据员工id转换表,我尝试了
数据框.transpose()
,但我无法让它完成我需要的工作。您可以迭代数据框并基于当前数据创建新的数据框,只需将两列合并在一起:
data = []
for row in df.itertuples():
data.append([
# row[2]: Day, row[1]: Date
'{} {}'.format(row[2],row[1]),
*row[3:],
])
new_df = pd.DataFrame(data)
您可以迭代dataframe并基于当前数据创建新的dataframe,只需将两列合并在一起:
data = []
for row in df.itertuples():
data.append([
# row[2]: Day, row[1]: Date
'{} {}'.format(row[2],row[1]),
*row[3:],
])
new_df = pd.DataFrame(data)
您可以使用:
另一个解决方案包括和:
但如果得到:
ValueError:索引包含重复的条目,无法重塑
具有和的解决方案:
您可以使用:
另一个解决方案包括和:
但如果得到:
ValueError:索引包含重复的条目,无法重塑
具有和的解决方案:
如果您熔化并旋转,则可以获得: 代码:
def by_employee(frame):
melted = pd.melt(
frame, value_vars=['GS', 'MS', 'ES'], id_vars=['Day', 'Date'])
pivot = pd.pivot_table(melted, values='variable', index='value',
columns=['Day', 'Date'],
aggfunc=lambda x: x.values[0])
return pivot
data = [x.strip().split() for x in """
Day Date GS MS ES
Monday 20/02/2017 11 22 33
Tuesday 21/02/2017 22 11 33
Wednesday 22/02/2017 33 22 11
""".split('\n')[1:-1]]
df = pd.DataFrame(data[1:], columns=data[0])
print(df)
print(by_employee(df))
Day Date GS MS ES
0 Monday 20/02/2017 11 22 33
1 Tuesday 21/02/2017 22 11 33
2 Wednesday 22/02/2017 33 22 11
Day Monday Tuesday Wednesday
Date 20/02/2017 21/02/2017 22/02/2017
value
11 GS MS ES
22 MS GS MS
33 ES ES GS
测试代码:
def by_employee(frame):
melted = pd.melt(
frame, value_vars=['GS', 'MS', 'ES'], id_vars=['Day', 'Date'])
pivot = pd.pivot_table(melted, values='variable', index='value',
columns=['Day', 'Date'],
aggfunc=lambda x: x.values[0])
return pivot
data = [x.strip().split() for x in """
Day Date GS MS ES
Monday 20/02/2017 11 22 33
Tuesday 21/02/2017 22 11 33
Wednesday 22/02/2017 33 22 11
""".split('\n')[1:-1]]
df = pd.DataFrame(data[1:], columns=data[0])
print(df)
print(by_employee(df))
Day Date GS MS ES
0 Monday 20/02/2017 11 22 33
1 Tuesday 21/02/2017 22 11 33
2 Wednesday 22/02/2017 33 22 11
Day Monday Tuesday Wednesday
Date 20/02/2017 21/02/2017 22/02/2017
value
11 GS MS ES
22 MS GS MS
33 ES ES GS
结果:
def by_employee(frame):
melted = pd.melt(
frame, value_vars=['GS', 'MS', 'ES'], id_vars=['Day', 'Date'])
pivot = pd.pivot_table(melted, values='variable', index='value',
columns=['Day', 'Date'],
aggfunc=lambda x: x.values[0])
return pivot
data = [x.strip().split() for x in """
Day Date GS MS ES
Monday 20/02/2017 11 22 33
Tuesday 21/02/2017 22 11 33
Wednesday 22/02/2017 33 22 11
""".split('\n')[1:-1]]
df = pd.DataFrame(data[1:], columns=data[0])
print(df)
print(by_employee(df))
Day Date GS MS ES
0 Monday 20/02/2017 11 22 33
1 Tuesday 21/02/2017 22 11 33
2 Wednesday 22/02/2017 33 22 11
Day Monday Tuesday Wednesday
Date 20/02/2017 21/02/2017 22/02/2017
value
11 GS MS ES
22 MS GS MS
33 ES ES GS
如果您熔化并旋转,则可以获得: 代码:
def by_employee(frame):
melted = pd.melt(
frame, value_vars=['GS', 'MS', 'ES'], id_vars=['Day', 'Date'])
pivot = pd.pivot_table(melted, values='variable', index='value',
columns=['Day', 'Date'],
aggfunc=lambda x: x.values[0])
return pivot
data = [x.strip().split() for x in """
Day Date GS MS ES
Monday 20/02/2017 11 22 33
Tuesday 21/02/2017 22 11 33
Wednesday 22/02/2017 33 22 11
""".split('\n')[1:-1]]
df = pd.DataFrame(data[1:], columns=data[0])
print(df)
print(by_employee(df))
Day Date GS MS ES
0 Monday 20/02/2017 11 22 33
1 Tuesday 21/02/2017 22 11 33
2 Wednesday 22/02/2017 33 22 11
Day Monday Tuesday Wednesday
Date 20/02/2017 21/02/2017 22/02/2017
value
11 GS MS ES
22 MS GS MS
33 ES ES GS
测试代码:
def by_employee(frame):
melted = pd.melt(
frame, value_vars=['GS', 'MS', 'ES'], id_vars=['Day', 'Date'])
pivot = pd.pivot_table(melted, values='variable', index='value',
columns=['Day', 'Date'],
aggfunc=lambda x: x.values[0])
return pivot
data = [x.strip().split() for x in """
Day Date GS MS ES
Monday 20/02/2017 11 22 33
Tuesday 21/02/2017 22 11 33
Wednesday 22/02/2017 33 22 11
""".split('\n')[1:-1]]
df = pd.DataFrame(data[1:], columns=data[0])
print(df)
print(by_employee(df))
Day Date GS MS ES
0 Monday 20/02/2017 11 22 33
1 Tuesday 21/02/2017 22 11 33
2 Wednesday 22/02/2017 33 22 11
Day Monday Tuesday Wednesday
Date 20/02/2017 21/02/2017 22/02/2017
value
11 GS MS ES
22 MS GS MS
33 ES ES GS
结果:
def by_employee(frame):
melted = pd.melt(
frame, value_vars=['GS', 'MS', 'ES'], id_vars=['Day', 'Date'])
pivot = pd.pivot_table(melted, values='variable', index='value',
columns=['Day', 'Date'],
aggfunc=lambda x: x.values[0])
return pivot
data = [x.strip().split() for x in """
Day Date GS MS ES
Monday 20/02/2017 11 22 33
Tuesday 21/02/2017 22 11 33
Wednesday 22/02/2017 33 22 11
""".split('\n')[1:-1]]
df = pd.DataFrame(data[1:], columns=data[0])
print(df)
print(by_employee(df))
Day Date GS MS ES
0 Monday 20/02/2017 11 22 33
1 Tuesday 21/02/2017 22 11 33
2 Wednesday 22/02/2017 33 22 11
Day Monday Tuesday Wednesday
Date 20/02/2017 21/02/2017 22/02/2017
value
11 GS MS ES
22 MS GS MS
33 ES ES GS
“{}{}”.format(第[2]行,第[1]行],*第[3]行:,->无效语法您使用的是哪个python版本?python的早期版本不允许解压列表,因此您需要自己解压:data=[]对于df.itertuples()中的行:data.append([{}}}.format(第[2]行,第[1]行],[第2]行]:Day,第[1]行]:Date行[3],第[4],第[5]行])new_df=pd.DataFrame(数据)好的,谢谢,我会工作并更新状态。我使用的是python 2.7'{}{}'。格式(第[2]行,第[1]行],*第[3]行:,->无效语法您使用的是哪种python版本?早期版本的python不允许解压列表,所以您需要自己解压:数据=[]对于df.itertuples()中的行:data.append([{}{}}.format(第[2]行,第[1]行],#第[2]行]:天,第[1]行]:日期行[3],第[4]行],第[5]]行)新建_df=pd.DataFrame(数据)好的,谢谢,我将工作并更新状态。我正在使用python 2.7