所以我有两个数据帧
在第一个数据框架中,它显示了4辆汽车在不同的销售日期和销售数量。
在第二个数据帧中,有些汽车有修理功能,所以它们被称为
df1:
Cars Range(Days) Sold
0 A 1-3 5
1 4-7 23
2 8-15 2
3 B 4-7 4
4 8-15 1
5 C 1-3 5
6 D 1-3 2
7 E 1-3 9
和
df2:
Car Repair_Calls
0 A 2
1 C 45
2 D 32
4 E 1
我试过了
Df1‘修复_调用’=df2_2‘修复_调用’
我得到了什么
Car Range(Days) Sold Repair_Calls
0 A 1-3 5 2
1 4-7 23 45
2 8-15 2 32
3 B 4-7 4 1
4 8-15 1
5 C 1-3 5
6 D 1-3 2
7 E 1-3 9
预期产出
Car Range(Days) Sold Repair_Calls
0 A 1-3 5 2
1 4-7 23
2 8-15 2
3 B 4-7 4 0
4 8-15 1
5 C 1-3 5 45
6 D 1-3 2 32
7 E 1-3 9 1
发布于 2018-06-04 10:37:25
使用map
by Series
,由set_index
和df2
创建
df1['Repair_Calls'] = df1['Cars'].map(df2.set_index('Car')['Repair_Calls'])
或merge
与left
联接:
df1 = df1.merge(df2, left_on='Cars',right_on='Car', how='left').drop('Car', axis=1)
print (df1)
Cars Range(Days) Sold Repair_Calls
0 A 1-3 5 2.0
1 NaN 4-7 23 NaN
2 NaN 8-15 2 NaN
3 B 4-7 4 NaN
4 NaN 8-15 1 NaN
5 C 1-3 5 45.0
6 D 1-3 2 32.0
7 E 1-3 9 1.0
但是,如果还需要添加缺失值,则通过唯一的非reindex
值添加NaN
:
s = df2.set_index('Car')['Repair_Calls'].reindex(df1['Cars'].dropna().unique(), fill_value=0)
df1['Repair_Calls'] = df1['Cars'].map(s)
print (df1)
Cars Range(Days) Sold Repair_Calls
0 A 1-3 5 2.0
1 NaN 4-7 23 NaN
2 NaN 8-15 2 NaN
3 B 4-7 4 0.0
4 NaN 8-15 1 NaN
5 C 1-3 5 45.0
6 D 1-3 2 32.0
7 E 1-3 9 1.0
发布于 2018-06-04 11:50:18
@san,您可以尝试以下代码:
如果解决方案不能满足您的问题,请提供更多的输入和解释。
“法典”
import pandas as pd
import numpy as np
data_arr1 = [
['A', '1-3', 5],
['', '4-7', 23],
['', '8-15', 2],
['B', '4-7', 4],
['', '8-15', 1],
['C', '1-3', 5],
['D', '1-3', 2],
['E', '1-3', 9]
]
columns1 = ["Car", "Range(Days)", "Sold"];
data_arr2 = [
['A', 2],
['C', 45],
['D', 32],
['E', 1]
];
columns2 = ["Car", "Repair_Calls"];
# Creating DataFrames
df = pd.DataFrame(data_arr1, columns=columns1)
df2 = pd.DataFrame(data_arr2, columns=columns2)
# Printing Dataframes
print(df);
print('\n')
print(df2);
# Merging df & df2 to get desired output
df3 = pd.merge(left=df, right=df2, left_on="Car", right_on="Car", how="outer").replace(np.nan, "", regex=True)
print('\n')
print(df3)
产出
Car Range(Days) Sold
0 A 1-3 5
1 4-7 23
2 8-15 2
3 B 4-7 4
4 8-15 1
5 C 1-3 5
6 D 1-3 2
7 E 1-3 9
Car Repair_Calls
0 A 2
1 C 45
2 D 32
3 E 1
Car Range(Days) Sold Repair_Calls
0 A 1-3 5 2
1 4-7 23
2 8-15 2
3 8-15 1
4 B 4-7 4
5 C 1-3 5 45
6 D 1-3 2 32
7 E 1-3 9 1
https://stackoverflow.com/questions/50678599
复制相似问题