Python 使用来自另一个数据帧的信息重新组合一个数据帧中的数据
我有以下两个数据帧:Python 使用来自另一个数据帧的信息重新组合一个数据帧中的数据,python,pandas,dataframe,group-by,mask,Python,Pandas,Dataframe,Group By,Mask,我有以下两个数据帧: import pandas as pd from datetime import datetime df_two = pd.DataFrame({'A': ['Jan', 'Jan', 'Feb', 'Feb', 'March', 'March'], 'B': ['Feb', 'Feb', 'March', 'March', 'Jan', 'Jan'], 'C': ['March'
import pandas as pd
from datetime import datetime
df_two = pd.DataFrame({'A': ['Jan', 'Jan', 'Feb', 'Feb', 'March', 'March'],
'B': ['Feb', 'Feb', 'March', 'March', 'Jan', 'Jan'],
'C': ['March', 'March', 'Jan', 'Jan', 'Feb', 'Feb']},
index=[datetime(2020, 1, 1), datetime(2020, 1, 2),
datetime(2020, 1, 3), datetime(2020, 1, 4),
datetime(2020, 1, 5), datetime(2020, 1,6)] )
df_one = pd.DataFrame({'series_one': [2, 5, 16, 17, 88, 89],
'series_two': [12, 15, 86, 87, 8, 9],
'series_three': [82, 85, 6, 7, 18, 19]},
index=[datetime(2020, 1, 1), datetime(2020, 1, 2),
datetime(2020, 1, 3), datetime(2020, 1, 4),
datetime(2020, 1, 5), datetime(2020, 1, 6)])
看起来是这样的:
df_one
series_one series_two series_three
2020-01-01 2 12 82
2020-01-02 5 15 85
2020-01-03 16 86 6
2020-01-04 17 87 7
2020-01-05 88 8 18
2020-01-06 89 9 19
及
我想使用这两个数据帧的信息并获得以下视图:
Jan Feb March
2020-01-01 2 12 82
2020-01-02 5 15 85
2020-01-03 6 16 86
2020-01-04 7 17 87
2020-01-05 88 18 88
2020-01-06 89 19 89
我该怎么做?如果问题复杂得多,它可能无法解决您的问题,但它可能是一个起点:
pd.DataFrame(list(df_one.apply(lambda x: [x[list(df_two.loc[x.name]=="Jan").index(True)],
x[list(df_two.loc[x.name]=="Feb").index(True)],
x[list(df_two.loc[x.name]=="March").index(True)]],axis = 1)),
index = df_one.index,
columns = ["Jan","Feb", "March"])
输出:
Jan Feb March
2020-01-01 2 12 82
2020-01-02 5 15 85
2020-01-03 6 16 86
2020-01-04 7 17 87
2020-01-05 8 18 88
2020-01-06 9 19 89
Feb Jan March
2020-01-01 12 2 82
2020-01-02 15 5 85
2020-01-03 16 6 86
2020-01-04 17 7 87
2020-01-05 18 8 88
2020-01-06 19 9 89
您可以尝试使用
apply
:
def func(row):
y = df_one.loc[row.name]
u = (dict(zip(row.values,y.values)))
return u
res = pd.DataFrame(list(df_two.apply(func,axis=1)), index=df_two.index)
res:
简
二月
前进
2020-01-01
2.
12
82
2020-01-02
5.
15
85
2020-01-03
6.
16
86
2020-01-04
7.
17
87
2020-01-05
8.
18
88
2020-01-06
9
19
89
让我们使用一些重塑和连接方法:
df_one = df_one.rename(columns=dict(zip(df_one.columns, df_two.columns)))
df_out = df_one.stack().reset_index(name='value').merge(df_two.stack().reset_index(name='month'))
df_out = df_out.pivot('level_0', 'month', 'value').rename_axis(index=None, columns=None)
print(df_out)
输出:
Jan Feb March
2020-01-01 2 12 82
2020-01-02 5 15 85
2020-01-03 6 16 86
2020-01-04 7 17 87
2020-01-05 8 18 88
2020-01-06 9 19 89
Feb Jan March
2020-01-01 12 2 82
2020-01-02 15 5 85
2020-01-03 16 6 86
2020-01-04 17 7 87
2020-01-05 18 8 88
2020-01-06 19 9 89
详情:
- 首先,让我们使用rename、dict和 拉链
- 堆叠每个数据帧并重置索引,创建公共列标题 合并
- 使用pivot重塑生成的数据帧
df_one.columns=['Jan','Feb','March']
或使用rename()
methodHey Scott.你好吗,我的朋友?感谢你们理解了这个问题并给出了如此精彩的答案…我真的很难理解这个问题本身:-)我只是查看了期望的输出,并使用他的输入复制了它。