我有一个data.frame df,如下所述
V1 V2
4 b c
14 g h
10 d g
6 b f
2 a e
5 b e
12 e f
1 a b
3 a f
9 c h
11 d h
7 c d
8 c g
13 f g
第一列是row.names列,所以只需忽略它。现在看第二列V1和V2。我想找到V1和V2列中的独特元素。因此,如果您看到V1,唯一元素是b,g,d,a,e,c,f,并且在V2中,唯一元素是c,h,g,f,e,b,d。现在,如果您查看上面列出的这些独特元素。即使是元素在V1和V2中也很常见,即b,g,d,a,e,c和f。
所以我需要创建一个新的data.frame,其中有一列列出了考虑V1和V2的所有独特元素。通过唯一元素,我指的是存在于V1或V2或两者中的元素,但它们不应在此新data.frame中重复列出,因此我想要的data.frame列在下面。如果列表按字母顺序排序会更好(如果值是字母表,如a,b,c,d ......或者如果元素是1,2,3,则按升序排列。
UniqueValues
a
b
c
d
e
f
g
h
假设这个新的data.frame被称为UV1,我有一个类似的data.frame,其中一列的行数相同或更大或更小,称为UV2(并且是其他类似操作的结果)我可以比较这两个data.frames,即比较UV1和UV2,并找到这些data.frames和值中相同的值,这些值在这些data.frames和将它们保存在2个不同的data.frames中,如(similarValuesdf)和(differentValuesdf)data.frames?
我是初学者,所以我更喜欢更简单的代码,而不是在单个语句中执行5-10个操作,就像我在其他回复中看到的那样。我明白这是为了节省时间,那些专业人员会经历很多事情来弄清楚用两行代码来执行整个事情,但我只是想学习,所以我真的很感激代码。 提前谢谢。
答案 0 :(得分:3)
我认为最好的方法是将列连接到一个向量中,然后使用df.pivot_table(index='Date', columns='Currency', aggfunc=np.sum)
函数:
my_list = ["2017-07-01", "ABC",312, 31, "Pounds", "2017-07-01", "XYZ" ,323, 41, "Pounds",
"2017-07-02", "ABC", 423, 21, "Dollars", "2017-07-02", "XYZ" ,335, 32, "Pounds",
"2017-07-03", "ABC", 421, 21, "Dollars", "2017-07-03", "XYZ", 304, 21, "Pounds" ]
df_raw = pd.DataFrame(np.array(my_list).reshape(6,5),
columns = ["Date", "Manufacturer", "Cost", "Transport", "Currency"])
df = df_raw.pivot(index='Date', columns='Manufacturer')
按字母顺序排列unique()
将是一个不错的选择。
unique(c(DF$V1,DF$V2))
[1] "b" "g" "d" "a" "e" "c" "f" "h"
答案 1 :(得分:1)
获取您的独特价值:
UniqueValues = sort(union(unique(df$V1), unique(df$V2)))
要获得两个data.frame的交集,您可以尝试:
df1 = data.frame(col1=c(1,4,6,8))
df2 = data.frame(col1=c(6,4,8,9))
similarValuesdf = merge(df1, df2)
# col1
#1 4
#2 6
#3 8
答案 2 :(得分:1)
让我们重新创建您的数据:
DF <- read.table(text = " V1 V2
4 b c
14 g h
10 d g
6 b f
2 a e
5 b e
12 e f
1 a b
3 a f
9 c h
11 d h
7 c d
8 c g
13 f g", header = TRUE, stringsAsFactors = FALSE)
将两列拆分为一个向量,并在该向量中找到唯一值:
u1 <- unique(unlist(DF[, c("V1", "V2")]))
sort(u1)
#[1] "a" "b" "c" "d" "e" "f" "g" "h"
第二个载体:
u2 <- c("d", "e", "f")
找到十字路口:
intersect(u1, u2)
#[1] "d" "e" "f"
找出设定差异:
setdiff(u1, u2)
#[1] "b" "g" "a" "c" "h"
答案 3 :(得分:0)
df_new =唯一(append(df $ V,df $ V2,after = length(df $ V1)))